Swift 仅在一个表达式中的可选值不是nil时调用函数?

Swift 仅在一个表达式中的可选值不是nil时调用函数?,swift,optional,optional-binding,Swift,Optional,Optional Binding,我知道这样做是可能的: let intValue: Int? = rawValue == nil ? Int(rawValue) : nil 甚至像这样: var intValue: Int? if let unwrappedRawValue = rawValue { intValue = Int(unwrappedRawValue) } 但是我想知道是否有一种方法可以在一个表达式中实现这一点,比如: let intValue: Int? = Int(rawValue) // Wh

我知道这样做是可能的:

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

因此,为了回答您的问题,您可以选择以下几种情况: 你的第一个:

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
}
第四种情况,如果您确定该值不是零

var intValue : Int?
intValue!
最后一种情况是,如果应用程序的值为零,则会使应用程序崩溃,因此将来可能会将其用于调试目的。我建议您看看苹果手册中的可选绑定和可选链接

在回答您的评论部分问题之前,大多数开发人员倾向于使用以下方法:

var intValue: Int?

if let unwrappedRawValue = rawValue {
    intValue = Int(unwrappedRawValue)
}
因为它似乎是最安全的类型。您的呼叫。

与中类似,您可以使用
map()
可选方法

/// If `self == nil`, returns `nil`.  Otherwise, returns `f(self!)`.
@warn_unused_result
@rethrows public func map<U>(@noescape f: (Wrapped) throws -> U) rethrows -> U?

如果intValue不是nil,则要将rawValue分配给intValue?我希望
intValue
Int(rawValue)
如果
rawValue
不是nil,否则,如果
rawValue
为nil,我希望
intValue
为nil。如果您确定它不是nil,但不是您的两种方法都能完成它们的工作,则可以显式地将其展开。请问你到底想做什么?或者这是一个普通的问题?这是一个普通的问题,我只是想知道是否有一种更“快速”的方法。最快速的方法,也是大多数开发人员倾向于使用的方法是你写的第二种。带有if-let语句的那个
func foo(rawValue : UInt32?) -> Int? {
    return rawValue.map { Int($0) }
}

foo(nil) // nil
foo(123) // 123