2016-07-11 8 views
0

私はSwift 3を "Swift Programming Beta"から削除しています。以下はenumの例です。この例の最後では、「init?(rawvalue:)を使用して、生の値から列挙のインスタンスを作成する」と書いています。誰でも私に教えて、どのようにそれを作ることができますか?ありがとう。enumオプションインスタンスを作成するには

enum Rank: Int { 

    case ace = 1 // Raw value 
    case two, three, four , five , six, seven, eight, nine, ten 
    case jack, queen, king 

init?(rawValue: Int) { 

    self = rawValue == 1 ? .ace : .jack 
} 

    func simpleDescription() -> String{ 

     switch self { 
     case .ace: 

      return "ace" 

     case .jack: 

      return "jack" 

     case .queen: 

      return "queen" 

     case .king: 

      return "king" 

     default: 

      return String(self.rawValue) 
     } 

    } 
} 

答えて

1

ので、同じようあなたは列挙型のため、オプションのinitを作成することができます。

init?(rawValue: String) { 
    if rawValue == "ace" { 
     self = .ace 
    } else { 
     return nil 
    } 
} 

elsetermに無効/予期しない値を扱う(initが、オプションの初期化子である理由です - それは返すことがあります。無効な入力が与えられた場合はnil)。お役に立てれば!

+0

あなたもそれを説明することはできますか? – WasimSafdar

+0

更新された応答を参照してください – Jason

+0

これは、関数を定義するのと同じであるため、クロージャの一種です。私は正しい? – WasimSafdar

2

あなたがここに見ることができるように:

enum Rank: Int 

"あなた" Rank列挙型生の値はタイプIntでなければなりません。

したがって、ace値を使用して新しいRank要素を作成するには、次のように記述します。また、initが返すRankこと

let queen = Rank(rawValue: 12) 

お知らせ:

let ace = Rank(rawValue: 1) 

はあなたが書くと女王を作成するにはオプション。つまり、無効なInt値を指定すると、nilが返されます。例えば

:あなたを助け

let notValid = Rank(rawValue: 100) //gives you nil in return 

希望。

1

使用はinit?(rawvalue:)初期化子:

let enumValue1 = Rank(rawValue: 100) 
print(enumValue1) 
// will print nil because raw value is too big 

let enumValue2 = Rank(rawValue: 6) 
print(enumValue) 
// will print `Optional(ACNotificationsDemo.Rank.six)` 
0
enum OptionalValues<T>{ 
    case None 
    case Some(T) 
} 
var possibleInteger: 
OptionalValue<Int>=.None 
possibleInteger = .Some(100) 
+2

これは質問に答えません。 – Moritz

+2

@PalaniKrishnanあなたの答えにいくつかの説明を加えてください。コードオンリーの回答はお勧めできません。ありがとうございました。 –

関連する問題