其实这种初始化有点像一个类帮另一个类初始化了,小的那个类被大的引用着。china?.CapitalCity.Country这样调用有点奇怪。
2019-01-17
楼下说没有关系其实还是有关系的,当双方初始化的完成都需要对方的时候,而且双方属性都是let和不能为空,这时候就需要用到unowned加上!属性来解决了。
2019-01-17
先使用一个协议封装起来一些必须完成这个委托任务必须要实现的方法,如游戏的规则和tableview的行数。
创建一个类,里面有个delegate的属性,这个delegate必须遵守协议。类内部使用delegate实现任务内部的逻辑,如游戏如何进行和tableview如何通过代理的函数去布局,这些逻辑被委托方都不需要知道。
当某个类需要成为委托方的时候,把这个delegate赋值给这个类,并在里面实现协议的方法,如tableView的属性或游戏规则,这就完成了委托的任务了。
创建一个类,里面有个delegate的属性,这个delegate必须遵守协议。类内部使用delegate实现任务内部的逻辑,如游戏如何进行和tableview如何通过代理的函数去布局,这些逻辑被委托方都不需要知道。
当某个类需要成为委托方的时候,把这个delegate赋值给这个类,并在里面实现协议的方法,如tableView的属性或游戏规则,这就完成了委托的任务了。
2019-01-17
为什么Struct中函数改变属性要加mutating呢! 因为struct是属于值类型的, 当新值传入 它需要拷贝一个新的副本去防止副本的修改影响到原属性,所以在覆盖原属性的操作中系统不知道这个新的副本要放在那里,所以加上mutating系统就知道这是一个覆盖操作 不应该开一个新的副本
2019-01-15