Ios 我应该在Swift 4中使用可选字符串吗
当我更新到Xcode 9.3时,我正在制作一个应用程序,它附带了一个变化,即如果let语句不能强制展开变量Ios 我应该在Swift 4中使用可选字符串吗,ios,mobile,swift4,Ios,Mobile,Swift4,当我更新到Xcode 9.3时,我正在制作一个应用程序,它附带了一个变化,即如果let语句不能强制展开变量位于顶层 这迫使我做了很多更改,因为在我对服务器的所有HTTP请求(不知道是否有帮助,但我使用Alamofire)中,我收到了字符串变量,所以我通常会强制展开它们,比如在这里,我得到了一个对象的价格 if let result = response.result.value! as? Dictionary<String, AnyObject>{
代码>位于顶层
这迫使我做了很多更改,因为在我对服务器的所有HTTP请求(不知道是否有帮助,但我使用Alamofire)中,我收到了字符串变量,所以我通常会强制展开它们,比如在这里,我得到了一个对象的价格
if let result = response.result.value! as? Dictionary<String, AnyObject>{
if let Price = result["Price"] as? String!{
if(Price != nil){
self.Error = ""
self.price = Int(Price)!
completed()
}
}
}
或者这样:
if let Price = result["Price"] as? String{
if(Price != nil){
self.Error = ""
self.price = Int(Price)!
completed()
}
}
我想你误解了代码>意味着。即使代码>是隐式展开的
,
和?
是同一件事-它们都表示一个可选对象。这意味着您仍然可以这样做:
let string: String! = nil
if string == nil { return }
当您有一些不可能存在的东西,但您希望编译器关闭,因为您确定它存在时,应该使用code>
您的结果[“价格”]的原因是什么?绳子
被弃用是因为它毫无意义。您将获得一个常规的可选(String?
),将其强制转换为“闭嘴编译器,这是存在的”可选(String!
),但使用if let
确保代码仅在值实际存在时才继续。因此,您告诉编译器闭嘴,但在代码继续之前,仍然要确保该值存在。。。没有道理,对吧?这就是它被弃用的原因<代码>代码>在此处不起任何作用,可以安全删除
您的代码可以如下所示并实现相同的结果:
if let Price = result["Price"] as? String {
self.Error = ""
self.price = Int(Price)!
completed()
}
对于第一行,第二行是正确的,if-let
向您保证,如果程序进入if语句,则属性不会为零。您可以省略对价格的检查!=nil
它的变量应该是price
-小p-我强烈建议你去掉Int的强制展开;如果无法解析数据,则应在错误中返回某种运行时错误,例如throw
。请尽量避免展开。有时它会添加更多的代码,但这是完全值得的。第二种方式是“as”?字符串{``对我来说很好。
if let Price = result["Price"] as? String {
self.Error = ""
self.price = Int(Price)!
completed()
}