3

我知道可以这样做:

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
4

2 回答 2

3

与将可选数组的计数作为字符串或 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
于 2015-10-18T22:48:46.613 回答
-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
}

第四种情况,如果您确定该值不为零

var intValue : Int?
intValue!

最后一种情况会使您的应用程序崩溃,以防它的值为 nil,因此您将来可能会将其用于调试目的。我建议您查看苹果手册中的可选绑定和可选链接的链接

可选链接

快速的完整苹果指南

并在回答您的评论部分问题结束时,大多数开发人员倾向于使用这种方法:

var intValue: Int?

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

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

于 2015-10-17T23:59:34.443 回答