如果子类没有实现任何父类的指定构造函数,则自动继承父类所有的指定构造函数以及便利构造函数
如果子类实现了父类所有的指定构造函数,则自动继承父类的所有便利构造函数
如果子类实现了父类所有的指定构造函数,则自动继承父类的所有便利构造函数
2022-03-13
说错了 当你类里面的属性只是声明类型而没有初始化的时候 你需要初始化了这个值再调用super.init 如果你在声明属性的时候已经给他附上值 那就不用先子后父了
2019-01-14
现在已经不需要先子后父了 其实这样设计没啥用 。子类从写init主要是怕父亲类还没构造出来就使用父亲类函数 所以super放第一就对了
2019-01-14
计算属性的get一般用于使用自身其他属性计算得到的值 set就是用于得到的新value改变其他属性的值 显然需要受到双方制约的时候才会使用计算属性
通常只会声明get属性 这时候你就无法改变这个计算属性啦 否则你就破坏了这个计算属性的意义 显然 如果你重写其set方法的时候用self调用自身 妄想改变这个计算属性的值 系统就会爆出警告说你这样会自己调用自己 (我试过这样调用 无限循环卡死了。。。) 显然这也失去了这个计算属性设计的意义
通常只会声明get属性 这时候你就无法改变这个计算属性啦 否则你就破坏了这个计算属性的意义 显然 如果你重写其set方法的时候用self调用自身 妄想改变这个计算属性的值 系统就会爆出警告说你这样会自己调用自己 (我试过这样调用 无限循环卡死了。。。) 显然这也失去了这个计算属性设计的意义
2019-01-14
swift 4.2.1
guard let preIndex = str.range(of: ",")?.lowerBound else {return nil} guard let sufIndex = str.range(of: ",")?.upperBound else{return nil}
guard let first = Double(str.prefix(upTo: preIndex)) else{return nil}
guard let second = Double(str.suffix(from: sufIndex)) else{return nil}
guard let preIndex = str.range(of: ",")?.lowerBound else {return nil} guard let sufIndex = str.range(of: ",")?.upperBound else{return nil}
guard let first = Double(str.prefix(upTo: preIndex)) else{return nil}
guard let second = Double(str.suffix(from: sufIndex)) else{return nil}
2018-11-17
let preIndex = str.range(of: ",")!.lowerBound
let sufIndex = str.range(of: ",")!.upperBound
let first = str.prefix(upTo: preIndex)
let second = str.suffix(from: sufIndex)
latitude = Double(first) ?? 0
longitude = Double(second) ?? 0
let sufIndex = str.range(of: ",")!.upperBound
let first = str.prefix(upTo: preIndex)
let second = str.suffix(from: sufIndex)
latitude = Double(first) ?? 0
longitude = Double(second) ?? 0
2018-11-17