观察下面几种书写的方式 ,实现同样的功能(除了最后一个)
///编译时间对比(Xcode9, ios11, 单位:毫秒)
/// person 为一个optional的自定义对象(var person: Person? ),里面有个string? 类型的属性str1, str2....
func hahha() {
//A: 23879.9mm
// guard let p = person else {
// return
// }
// let str = (p.str1 ?? "") + (p.str2 ?? "") + (p.str3 ?? "") + (p.str4 ?? "")
// label.text = str
//B: 21239.2mm
// guard let p = person else {
// return
// }
// let str: String? = (p.str1 ?? "") + (p.str2 ?? "") + (p.str3 ?? "") + (p.str4 ?? "")
// label.text = str
//C: 16039.6
// guard let p = person else {
// return
// }
// let str: String = (p.str1 ?? "") + (p.str2 ?? "") + (p.str3 ?? "") + (p.str4 ?? "")
// label.text = str
//D: 43.5mm
// guard let p = person else {
// return
// }
// let strs: [String?] = [p.str1, p.str2, p.str3, p.str4]
// let str: String = strs.reduce("") { (result, str) -> String in
// if let noNul = str {
// return result + noNul
// } else {
// return result
// }
// }
// label.text = str
//E: 39.2mm
// guard let p = person else {
// return
// }
// let strs: [String?] = [p.str1, p.str2, p.str3, p.str4]
// var str: String = ""
// for ss in strs {
// if let s = ss { str += s }
// }
// label.text = str
//F: 37.0mm
// guard let p = person else {
// return
// }
// var str: String = ""
// if let str1 = p.str1 { str += str1 }
// if let str2 = p.str2 { str += str2 }
// if let str3 = p.str3 { str += str3 }
// if let str4 = p.str4 { str += str4 }
// label.text = str
//G: 12.7mm
// guard let p = person, let str1 = p.str1, let str2 = p.str2, let str3 = p.str4, let str4 = p.str4 else {
// return
// }
// let str: String = str1 + str2 + str3 + str4
// label.text = str
}
通过找不同可以发现,swift的类型推断很耗时!
写法A和写法F相差600倍,极端情况G 相差1880倍
所以说尽量避免类型推断