swift的函数跟闭包也分为 (无参无返回值,无参有返回值,有参无返回值,有参有返回值)四种情况。可以上代码来看一下。
func demo1 ( ) { print ("没有参数没有返回值") }
func demo2 ( ) ->String { print("没有参数有返回值") return "xixi"}
func demo3 (str1:String,str2:String )->( ) { print("有参数没有返回值") }
func demo4 (str1:String,str2:String)->String { print("有参数有返回值") return "\(str1)\(str2)"}
然后再 viewDidLoad中分别调用就行了
/* 闭包 */ 闭包相当于是 C里面的 block,封装了一段有特定功能的代码块 。闭包的书写格式为: { (输入参数列表)->返回值类型 in 闭包里面执行的代码块 }
/* 懒加载 */ 懒加载的书写格式是特定的:
lazy var 变量名:变量类型 = { let 定义一个同样类型的常量并赋值 return xx }( )
/*继承?*/ swift里面 set方法的写法:
var 变量名:类型? { didSet{ } }
只要是自定义的函数就必须机上 func,系统函数不用加,且字样是红色的 只要是 override修饰的函数,代表这个函数继承自父类 必选类型属性在重写 init方法时,必须在 super.init( )之前进行赋值。如果重载了初始化方法,并且没有提供系统默认的初始化方法,外界是无法访问到系统默认的初始化方法。 类方法有两种写法: class / static 。 前者能够被子类重载,后者不能。因为后者修饰的是在静态区,只有一份资源能够使用。
/* KVC */ 在字典转 model中,基本数据类型不能为可选类型,会导致找不到 key而无法赋值。可以通过给一个默认值的方法解决。 KVC 是通过字符串间接访问对象属性的一种方式
通过上图有几个注意点: 1. 字典的创建要明确类型 2. 基本数据类型不为可选类型 3.继承父类的方法
/* 单例 */ 单例的好处在于很大程度上减少了内存的使用,避免了频繁的 allocinit? 单例在 swift中有两种创建方法:
1. static let shareInstance:Singleton = { let singleton = Singleton( ) return singleton }( ) 其中Singleton是继承自 NSObject的一个类
2. static let singleton = Singleton( ) class func shareInstance( )->Singleton { return singleton }
/* 协议 */
首先创建一个类 这里叫 Women 继承 NSObject
然后写一个协议 protocol womenDeleGate{ func makeMoney( ) } protocol 标识符如果前面没有@objc,表示协议里面的所有方法都必须实现。如果协议里面有一些是选择实现的方法,那么在这些方法前面加上 optial,并且在 protocol前面加上@objc修饰符
class Women:NSObject{ var delegate:womenDelegate? } // 声明代理
在 controller中遵守协议
在 viewdidLoad( )中
创建一个对象 let women = Women( ) 设置代理 women.delegate = self 控制代理执行协议 women.delegate?.makeMoney( ) 在 viewdidLoad外实现协议方法 func makeMoney( ) { print ("实现了协议方法") }