只有当一个表达式中的可选项不是nil时才调用函数?

时间:2015-10-17 23:43:00

标签: 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) // Where Int() is called only if rawValue is not nil

2 个答案:

答案 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手册

中的可选链接

optional Chaining

full apple guide for swift

并且在回答评论部分问题时,大多数开发人员倾向于使用此方法:

var intValue: Int?

if let unwrappedRawValue = rawValue {
    intValue = Int(unwrappedRawValue)
}

因为它似乎是最安全的类型。你的电话。