2016-08-07 9 views

答えて

6

これは、enumオプションを選択する簡単な方法です。あなたはこの列挙

enum Colors { 
    case Yellow, Blue, Red, Green 
} 

を持っているので、もし、あなたがそう

のように、.prefixと列挙型を渡すことができるはずな

func draw(withColor: Colors) { 

} 

として、これらのプロパティの1つを使用する機能を持っていました

draw(withColor: .Yellow) 

これは次のようになりますするためのショートカットである、より詳細な方法:

draw(withColor: Colors.Yellow) 
1

実際にはEnumerationです。列挙は、複数のケースの1つになります。あなたの例では、ケースは.userInitiatedです。QOSClass.userInitiatedの略です。この事件は本当に何かを表しているだけであり、それはいかなる価値も持っている必要はありません。アップルは、自分のサイト上で列挙型のこの偉大な、実用的な例があります。

enum CompassPoint { 
    case North 
    case South 
    case East 
    case West 
} 

あなたはこのように、メンバーの名前が続くタイプの後にドットを置くことによって、列挙型のメンバーにアクセス:CompassPoint.North。しかし、予想されるタイプがコンテキストから明らかな場合は、タイプを省略して.Northを使用してください。

例では、列挙型はQoSClassです。しかし、DispatchQueue.global(qos:)QoSClassの列挙型を予期しているので、型を省略して.userInitiatedを使用することができます。なぜなら、Swiftは型をコンテキストから推測できるからです。

私は、列挙型は関連する値を持つ必要はありませんが、可能です。関連付けられた値を持つ列挙型は非常に強力であり、Swiftの私の好きな部分の1つです。あなたはここでこのすべてについて多くを読むことができます:https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Enumerations.html

ます。また、新しいGCDのAPIが、ここでどのように実装されるかについての詳細を見ることができます:https://github.com/apple/swift-evolution/blob/master/proposals/0088-libdispatch-for-swift3.md

3

他の答えは非常によくOPのケースを記述しています。しかし、 "ドットシンタックス"は、より一般的な方法で実装されたSwiftの "enum only"機能ではありません。

型のインスタンスを返すすべての型メンバーにアクセスできます。型の推論が可能な「ドット構文」を使用します。

スウィフト3

class MyClass { 
    var value: Int 
    init(value: Int) { 
     self.value = value 
    } 
    static var `default` = MyClass(value: 0) 
    private static var cache: [Int: MyClass] = [:] 
    static func cachedInstance(value: Int) -> MyClass { 
     if let instance = cache[value] { 
      return instance 
     } else { 
      let instance = MyClass(value: value) 
      cache[value] = instance 
      return instance 
     } 
    } 
} 

var myObject: MyClass = .default //Accessing a type property 
myObject = .cachedInstance(value: 2) //Accessing a type method 
myObject = .init(value: 1) //Accessing an initializer 

スウィフト2

var myObject: MyClass = .`default` //Accessing a type property 
myObject = .cachedInstance(2) //Accessing a type method 
myObject = .init(value: 1) //Accessing an initializer 

だから、あなたはこのような何かを書くことができます

関連する問題