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

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?  

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值