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的类型安全特性,当我们尝试添加StringString? ,编译器会在编译时警告我们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代码找到它。 如果它进入生产应用程序,那将至关重要。

如果您喜欢该帖子,请点击❤️按钮并进行宣传。

请在下面发表评论,以提供您的反馈并帮助我改善内容。