观察下面几种书写的方式 ,实现同样的功能(除了最后一个)
///编译时间对比(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.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倍 所以说尽量避免类型推断