我知道可以这样做:
let intValue: Int? = rawValue == nil ? Int(rawValue) : nil
或者甚至喜欢这样:
var intValue: Int?
if let unwrappedRawValue = rawValue {
intValue = Int(unwrappedRawValue)
}
但是,我想知道是否有办法在一个表达式中执行此操作,如下所示:
let intValue: Int? = Int(rawValue) // Where Int() is called only if rawValue is not nil
答案 0 :(得分:2)
与Getting the count of an optional array as a string, or nil类似,您可以使用map()
Optional
的方法:
/// If `self == nil`, returns `nil`. Otherwise, returns `f(self!)`.
@warn_unused_result
@rethrows public func map<U>(@noescape f: (Wrapped) throws -> U) rethrows -> U?
示例:
func foo(rawValue : UInt32?) -> Int? {
return rawValue.map { Int($0) }
}
foo(nil) // nil
foo(123) // 123
答案 1 :(得分:-2)
因此,为了回答您的问题,您可以在此处获得以下可选案例: 你的第一个:
let intValue: Int? = rawValue == nil ? Int(rawValue) : nil
你的第二个:
var intValue: Int?
if let unwrappedRawValue = rawValue {
intValue = Int(unwrappedRawValue)
}
第三种情况:
var intValue : Int?
if intValue !=nil
{
//do something
}
第四种情况,如果您确定该值不是nil
var intValue : Int?
intValue!
最后一种情况会使您的应用程序崩溃,以防它的值为零,因此您将来可能会将其用于调试目的。我建议您查看这些可选绑定链接以及Apple手册
中的可选链接并且在回答评论部分问题时,大多数开发人员倾向于使用此方法:
var intValue: Int?
if let unwrappedRawValue = rawValue {
intValue = Int(unwrappedRawValue)
}
因为它似乎是最安全的类型。你的电话。