初探swift语言的学习笔记四(类对象,函数)

2024-09-02 16:08

本文主要是介绍初探swift语言的学习笔记四(类对象,函数),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作者:fengsh998
原文地址:http://blog.csdn.net/fengsh998/article/details/29606137
转载请注明出处
如果觉得文章对你有所帮助,请通过留言或关注微信公众帐号fengsh998来支持我,谢谢!


swift扩展了很多功能和属性,有些也比较奇P。只有慢慢学习,通过经验慢慢总结了。

下面将初步学习一下类的写法。

码工,最大爱好就是看码,而不是文字,太枯燥。

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. //  
  2. //  computer.swift  
  3. //  swiftDemo  
  4. //  
  5. //  Created by apple on 14-6-8.  
  6. //  Copyright (c) 2014年 fengsh. All rights reserved.  
  7. /* 
  8.     写本例子的目的在于快速学习swift类的写法,包括知识点: 
  9. 1.属性设置 
  10. 2.构造、释构 
  11. 3.接口实现多态 
  12. 4.函数的重载(重载很特别不需要overload关键词Delphi的朋友注意了)和重写(override) 
  13. 5.类函数(静态成员函数) 
  14. 6.各种函数的声明,带参,默认值,多个返回,多个输出参数,多个未确定参数的函数,内连函数等 
  15. 7.函数类型变量,函数地址作为传参,返回函数地址(还未完工,学习中) 
  16. 8.单例 
  17. 9.swift新功能willset,didset @lazy 属性 
  18. 10.(后续学习补充) 
  19.  
  20.  
  21. */  
  22.   
  23. import Foundation  
  24.   
  25. var instance : Computer?  
  26. let unk = "unKnow"  
  27.   
  28. //显示器屏幕宽高  
  29. struct MonitorWH {  
  30.     var width           = 0  
  31.     var height          = 0  
  32.     var resolution      = 0.0           //分辩率  
  33. }  
  34.   
  35. //协义,接口,实现多重继承  
  36. protocol ProtocolComputer {  
  37.     var price : Double {get}            //只有get方法  
  38.       
  39.     func runComputer()  
  40. }  
  41.   
  42. //计算机类型  
  43. enum ComputerType :Int  
  44. {  
  45.     case none  
  46.     case book                           //笔记本  
  47.     case superBook                      //超级笔记本  
  48.     case home                           //家庭电脑  
  49. }  
  50.   
  51.   
  52. func callbackWhenStarting()//computer:Computer  
  53. {  
  54.       
  55. }  
  56.   
  57. //计算机类  
  58. class Computer : NSObject,ProtocolComputer  
  59. {  
  60.     var cpu         = unk               //cpu  
  61.     var memory      = unk               //内存  
  62.     var hardDisk    = unk               //硬盘  
  63.     var monitor     = unk               //显示器  
  64.     var cpName      = unk               //品牌  
  65.     var computertype : ComputerType = .none  
  66.       
  67.     //@lazy //这关键词声明的有啥作用啊????  
  68.       
  69.     //继承接口的属性  
  70.     var price :Double = 0.0  
  71.   
  72.     //willset didset属性  
  73.     var totalPrice: Int = 0 {  
  74.         willSet(newTotalPrice) { //参数使用new+变量名且变量名首地址大写  
  75.             println("准备将totalPrice值(原值为:\(totalPrice))设为: \(newTotalPrice)")  
  76.             //to do somthing before set.  
  77.         }  
  78.         didSet {  
  79.             if totalPrice > oldValue  {  
  80.                 println("设置后新值比旧值增加了\(totalPrice - oldValue)")  
  81.             }  
  82.         }  
  83.     }  
  84.       
  85.     //声明一个set,get属性  
  86.     var computerPrice: Double {  
  87.         get {  
  88.             println("you call computerPrice.")  
  89.             return price  
  90.         }  
  91.         set {  
  92.             price = newValue  
  93.             println("you set computerPrice value is \(price)")  
  94.         }  
  95.     }  
  96.       
  97.     //默认构造  
  98.     init()  
  99.     {  
  100.         println("default creatrustor is called.")  
  101.     }  
  102.       
  103.     //默认构造 不能和init()共存  
  104. //    convenience init() {  
  105. //        self.init(computerName: "unknow" ,price:0)  
  106. //    }  
  107.   
  108.       
  109.     //自定义构造函数  
  110.     init(computerName:String,price:Double)  
  111.     {  
  112.         println("custom creatrustor is called.")  
  113.         self.cpName = computerName  
  114.         self.price = price  
  115.     }  
  116.       
  117.     //释构  
  118.     deinit {  
  119.         println("this is destory?")  
  120.     }  
  121.       
  122.       
  123.     func description() -> String  
  124.     {  
  125.         //还真不知道怎么换行来写代码以前可以使用\现在被作参用了  
  126.         return "Computer description : product \(self.cpName) ,type is \(self.computertype.toRaw()) , cpu is \(self.cpu) ,memory is \(self.memory),disk is \(self.hardDisk) ,monitor is \(self.monitor) ,price is \(self.price)"  
  127.     }  
  128.       
  129.     //类函数 (OC 中的+号操作, c/c++ 中的static 函数)  
  130.     class func shareInstance() -> Computer  
  131.     {  
  132.         return Computer()  
  133.     }  
  134.       
  135.     //开机关机 (不带返回值函数)  
  136.     func operationComputer(onOrOff : Bool)  
  137.     {  
  138.         if onOrOff  
  139.         {  
  140.             println("computer is starting")  
  141.         }  
  142.         else  
  143.         {  
  144.             println("computer is stopping")  
  145.         }  
  146.     }  
  147.       
  148.     //无参,无返回值函数  
  149.     func computerRunning()  
  150.     {  
  151.         println("computer is running")  
  152.     }  
  153.       
  154.     //多个返回值(即输出参数)  
  155.     func getComputerConfig()->(cpu:String,hd:String,mem:String,mon:String)  
  156.     {  
  157.         return (self.cpu,self.hardDisk,self.memory,self.monitor)  
  158.     }  
  159.       
  160.     //使用inout参数来作为输出参数  
  161.     func getComputerConfig(inout cpu:String,inout hd:String,inout mem:String,inout mon:String)  
  162.     {  
  163.         cpu     = self.cpu  
  164.         hd      = self.hardDisk  
  165.         mem     = self.memory  
  166.         mon     = self.monitor  
  167.     }  
  168.       
  169.     //外部参数名函数(目的是让调用者更加清楚每个参数的具体函义)  
  170.     //computerCPU,withComputerhardDisk,withComputerMemory,withComputerMonitor 这些都是外部参数名  
  171.     //在调用时必须带上  
  172.     func setComputerConfig(computerCPU cpu:String,withComputerhardDisk hd:String,  
  173.         withComputerMemory mem:String,withComputerMonitor mon:String)  
  174.     {  
  175.         self.cpu            = cpu  
  176.         self.hardDisk       = hd  
  177.         self.memory         = mem  
  178.         self.monitor        = mon  
  179.     }  
  180.       
  181.     //使用#来把变量名提升了具有外部参数名作用的变量名,这样就不用再写一次外部参数名(在外部参数名与变量名相同时使用)  
  182.     func setComputerConfig(#cpu:String,disk:String,mem:String,mon:String)  
  183.     {  
  184.         self.cpu            = cpu  
  185.         self.hardDisk       = disk  
  186.         self.memory         = mem  
  187.         self.monitor        = mon  
  188.     }  
  189.       
  190.     //参数的默认值  
  191.     func macBookPro(pname:String = "Apple",cpu:String = "Intel Core I5",type:ComputerType,  
  192.         mem:String = "2G",disk:String ,mon:String = "Intel HD Graphics 4000")  
  193.     {  
  194.         self.cpu            = cpu  
  195.         self.hardDisk       = disk  
  196.         self.memory         = mem  
  197.         self.monitor        = mon  
  198.         self.cpName         = pname  
  199.         self.computertype   = type  
  200.     }  
  201.       
  202.     //可变参数  
  203.     func usbNumbers(usbs:String...) -> String  
  204.     {  
  205.         var ret : String = ""  
  206.         for usb in usbs  
  207.         {  
  208.             println(usb)  
  209.             ret += (usb + ",")  
  210.         }  
  211.         return ret  
  212.     }  
  213.       
  214.     //常量参数、变量参数  
  215.     //尽管函数内部修改了version 但并不影响原来外部设定的值  
  216.     func lookWindowsVersion(var version:String) ->String  
  217.     {  
  218.         version = "default windows " + version  
  219.         return version  
  220.     }  
  221.       
  222.   
  223.     //mutating func  
  224.       
  225.     func getResolution(pname:String) -> MonitorWH  
  226.     {  
  227.         var mt = MonitorWH(width: 1364,height: 1280,resolution: 16/9)  
  228.         if pname == "Phripse"  
  229.         {  
  230.             mt = MonitorWH(width: 5555,height: 3333,resolution: 29/10)  
  231.         }  
  232.           
  233.         return mt  
  234.     }  
  235.       
  236.     //函数作为参数传参  
  237.       
  238.     //var callbackWhenStarting : ()->() = callbackWhenStarting  
  239.     //函数作为返回值  
  240.     //函数作为变量定义  
  241.     //嵌套函数  
  242.     func openTask()  
  243.     {  
  244.         func openOtherTask()  
  245.         {  
  246.             println("open other task")  
  247.         }  
  248.         println("open task")  
  249.     }  
  250.       
  251.     //函数重写  
  252.     func lookComputerBasicHardInfo(computer:Computer)  
  253.     {  
  254.   
  255.     }  
  256.       
  257.     //接口实现  
  258.     func runComputer()  
  259.     {  
  260.         println("Computer run.")  
  261.     }  
  262. }  
  263.   
  264.   
  265. class Lenove : Computer  
  266. {  
  267.     override func lookComputerBasicHardInfo(computer:Computer)  
  268.     {  
  269.         if computer is Lenove  //is as 操作。  
  270.         {  
  271.             println("这是联想")  
  272.         }  
  273.     }  
  274. }  

调用DEMO:

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. //var cpt = Computer()   //调用默认构造  
  2.        var cpt = Computer(computerName: "Apple",price:12000)   //调用自定义构造  
  3.        println(cpt.description)  
  4.        println(cpt.getComputerConfig())  
  5.          
  6.        //属性测试  
  7.        println("价钱为:\(cpt.computerPrice)")  
  8.        cpt.computerPrice = 2000.0;  
  9.        println("设置后的价钱为:\(cpt.computerPrice)")  
  10.          
  11.        //测试willset didset  
  12.        cpt.totalPrice = 100;  
  13.        cpt.totalPrice = 400;  
  14.        cpt.totalPrice = 900;  
  15.          
  16.        var a = "",b = "",c = "",d = ""  
  17.        cpt.getComputerConfig(&a,hd: &b,mem: &c,mon: &d)  
  18.        println("a=\(a),b=\(b),c=\(c),d=\(d)")  
  19.          
  20.        cpt.setComputerConfig(computerCPU :"inter i5", withComputerhardDisk:"WD 500",  
  21.            withComputerMemory:"4G",withComputerMonitor:"Phripse")  
  22.          
  23.        println("最新配置:\(cpt.description)")  
  24.          
  25.        cpt.setComputerConfig(cpu: "AMD", disk: "HD 1T", mem: "8G", mon: "SamSung")  
  26.        println("最新配置:\(cpt.description)")  
  27.          
  28.        //使用缺省值调用函数  
  29.        cpt.macBookPro(type: ComputerType.book,disk: "5")  
  30.        println("平果配置:\(cpt.description)")  
  31.          
  32.        let usbSupportType = cpt.usbNumbers("2.0","3.0")  
  33.        println("支持USB接口:\(usbSupportType))")  
  34.          
  35.        let extentUsbType = cpt.usbNumbers("5.0")  
  36.        println("扩展USB接口:\(extentUsbType)")  
  37.          
  38.        var version = "xp 3";  
  39.        let newversion = cpt.lookWindowsVersion(version);  
  40.        println(version)  
  41.        println(newversion)  

输出:

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. custom creatrustor is called.  
  2. Computer description : product Apple ,type is 0 , cpu is unKnow ,memory is unKnow,disk is unKnow ,monitor is unKnow ,price is 12000.0  
  3. (unKnow, unKnow, unKnow, unKnow)  
  4. you call computerPrice.  
  5. 价钱为:12000.0  
  6. you set computerPrice value is 2000.0  
  7. you call computerPrice.  
  8. 设置后的价钱为:2000.0  
  9. 准备将totalPrice值(原值为:0)设为: 100  
  10. 设置后新值比旧值增加了100  
  11. 准备将totalPrice值(原值为:100)设为: 400  
  12. 设置后新值比旧值增加了300  
  13. 准备将totalPrice值(原值为:400)设为: 900  
  14. 设置后新值比旧值增加了500  
  15. a=unKnow,b=unKnow,c=unKnow,d=unKnow  
  16. 最新配置:Computer description : product Apple ,type is 0 , cpu is inter i5 ,memory is 4G,disk is WD 500 ,monitor is Phripse ,price is 2000.0  
  17. 最新配置:Computer description : product Apple ,type is 0 , cpu is AMD ,memory is 8G,disk is HD 1T ,monitor is SamSung ,price is 2000.0  
  18. 平果配置:Computer description : product Apple ,type is 1 , cpu is Intel Core I5 ,memory is 2G,disk is 5 ,monitor is Intel HD Graphics 4000 ,price is 2000.0  
  19. 2.0  
  20. 3.0  
  21. 支持USB接口:2.0,3.0,)  
  22. 5.0  
  23. 扩展USB接口:5.0,  
  24. xp 3  
  25. default windows xp 3  
  26. this is destory?  

样子最好自己写一个从过种中去学习。光看,也许还不清楚是什么。

谢谢大家,因为是英文文档,看得我头也比较痛,有些要猜和运行来理解,还有些没有完善有点乱。有些没有搞懂所以就没有整理好。

大家共同学习,共同进步。

这篇关于初探swift语言的学习笔记四(类对象,函数)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1130433

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

hdu1171(母函数或多重背包)

题意:把物品分成两份,使得价值最接近 可以用背包,或者是母函数来解,母函数(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v) 其中指数为价值,每一项的数目为(该物品数+1)个 代码如下: #include<iostream>#include<algorithm>

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学