Swift中的可选-了解原因
Swift带有可选和非可选变量的新概念。 在回答为什么是可选的? ,您需要快速了解什么是可选的?
var someOptionalString:字符串? // 可选的 var nonOptionString:String =“ 123” //非可选
那是?
在声明中意味着什么? 好吧,这是一种快速声明可选变量的方法。
好。 但是,这是什么可选内容?
可选的是一种表示变量中是否有值或什么都不表示(即没有值)的方法。
从上面的代码, someOptionalString
可选变量,我们可以得出结论,它可以包含一些字符串值,也可以根本不包含任何字符串值。
迅速地, nil
是一个特殊值,表示没有值。 因此, someOptionalString
可以包含字符串值,也可以为nil
。
好。 到目前为止很清楚。 但是为什么是可选的 ?
让我用示例解释一下:
-(NSString *)getFormattedPhone:(NSString *)phone { 如果(phone.length == 10){ NSString * countryCode =“ +91” 返回[NSString stringWithFormat:@”%@-%@”,countryCode,电话] } 返回零; } NSString * formattedPhone = [self getFormattedPhone:@” 2233231341223“]; //返回nil NSString * message = [“电话:” stringByAppendingString:formattedPhone]; //运行时错误 NSLog(@”%@”,消息);
如果我们在Swift中编写相同的代码怎么办:
func getFormattedPhone(phone:String)->字符串? { 如果(phone.length == 10){ 返回“ +91” +电话 } 返回零 } var formattedPhone:String? = getFormattedPhone(“ 2233231341223”) let message =“ Phone:” + formattedPhone //编译时错误 println(消息)
由于Swift的类型安全特性,当我们尝试添加String
和String?
时 ,编译器会在编译时警告我们String?
要使用可选变量值,我们必须解开该可选变量。
嘿,等等..现在展开一个Optional是什么?
解包是获取可选变量的基础值的过程。
有很多不同的解包方法,但是现在我们仅讨论两种基本方法:
如果声明并强制展开:
var formattedPhone:String? = getFormattedPhone(“ 2233231341223”) 如果formattedPhone!= nil { let message =“ Phone:” + formattedPhone! println(消息) }
首先,我们确保formattedPhone
不是nil
即其中包含一些值,如果该值为true,则使用!
在变量末尾强制在if
块中解包该值。
在没有事先检查nil
情况下使用强制展开会导致运行时错误 。
可选绑定:
var formattedPhone:String? = getFormattedPhone(“ 2233231341223”) 如果让formattedPhoneTemp = formattedPhone { let message =“ Phone:” + formattedPhoneTemp println(消息) }
使用此选项来解包Optional ,如果formattedPhone
包含任何值,则将该值分配给临时变量formattedPhoneTemp
并且该临时变量在if
块中可用。
因此,使用Optional使我们避免了现在可以在编译时发现的严重错误 ,只有在发生运行时错误时,才可以使用Objective-C
代码找到它。 如果它进入生产应用程序,那将至关重要。
如果您喜欢该帖子,请点击❤️按钮并进行宣传。
请在下面发表评论,以提供您的反馈并帮助我改善内容。