3

私はこれを次のように行うことが可能であることを知っています:

let intValue: Int? = rawValue == nil ? Int(rawValue) : nil

または、次のようにします。

var intValue: Int?

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

ただし、次のように、これを 1 つの式で行う方法があるかどうかを調べています。

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

あなたの2番目のもの:

var intValue: Int?

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

3番目のケース:

var intValue : Int?
if intValue !=nil
{
//do something
}

値が nil でないことが確実な場合の 4 番目のケース

var intValue : Int?
intValue!

最後のケースでは、値が nil の場合にアプリケーションがクラッシュするため、将来デバッグ目的で使用する可能性があります。アップルのマニュアルのオプションのバインディングとオプションのチェーンについては、これらのリンクをご覧になることをお勧めします

オプションの連鎖

Swift の完全な Apple ガイド

コメント セクションの質問に答えるために、ほとんどの開発者はこの方法を使用する傾向があります。

var intValue: Int?

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

最もタイプセーフなようです。あなたの電話。

于 2015-10-17T23:59:34.443 に答える