初探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

相关文章

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

Python itertools中accumulate函数用法及使用运用详细讲解

《Pythonitertools中accumulate函数用法及使用运用详细讲解》:本文主要介绍Python的itertools库中的accumulate函数,该函数可以计算累积和或通过指定函数... 目录1.1前言:1.2定义:1.3衍生用法:1.3Leetcode的实际运用:总结 1.1前言:本文将详

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE

MySQL数据库函数之JSON_EXTRACT示例代码

《MySQL数据库函数之JSON_EXTRACT示例代码》:本文主要介绍MySQL数据库函数之JSON_EXTRACT的相关资料,JSON_EXTRACT()函数用于从JSON文档中提取值,支持对... 目录前言基本语法路径表达式示例示例 1: 提取简单值示例 2: 提取嵌套值示例 3: 提取数组中的值注意

C语言中自动与强制转换全解析

《C语言中自动与强制转换全解析》在编写C程序时,类型转换是确保数据正确性和一致性的关键环节,无论是隐式转换还是显式转换,都各有特点和应用场景,本文将详细探讨C语言中的类型转换机制,帮助您更好地理解并在... 目录类型转换的重要性自动类型转换(隐式转换)强制类型转换(显式转换)常见错误与注意事项总结与建议类型

Go语言利用泛型封装常见的Map操作

《Go语言利用泛型封装常见的Map操作》Go语言在1.18版本中引入了泛型,这是Go语言发展的一个重要里程碑,它极大地增强了语言的表达能力和灵活性,本文将通过泛型实现封装常见的Map操作,感... 目录什么是泛型泛型解决了什么问题Go泛型基于泛型的常见Map操作代码合集总结什么是泛型泛型是一种编程范式,允

Android kotlin语言实现删除文件的解决方案

《Androidkotlin语言实现删除文件的解决方案》:本文主要介绍Androidkotlin语言实现删除文件的解决方案,在项目开发过程中,尤其是需要跨平台协作的项目,那么删除用户指定的文件的... 目录一、前言二、适用环境三、模板内容1.权限申请2.Activity中的模板一、前言在项目开发过程中,尤

Java function函数式接口的使用方法与实例

《Javafunction函数式接口的使用方法与实例》:本文主要介绍Javafunction函数式接口的使用方法与实例,函数式接口如一支未完成的诗篇,用Lambda表达式作韵脚,将代码的机械美感... 目录引言-当代码遇见诗性一、函数式接口的生物学解构1.1 函数式接口的基因密码1.2 六大核心接口的形态学