で属性を開始するにはどういう意味:スウィフトプログラミング言語、それは次のコード行では、例えば、期間
DispatchQueue.global(qos: .userInitiated).async { ... }
なぜ期間で.userInitiated
開始していますか?これはObjective Cに従っているのか、それともSwiftに固有のものなのでしょうか?
で属性を開始するにはどういう意味:スウィフトプログラミング言語、それは次のコード行では、例えば、期間
DispatchQueue.global(qos: .userInitiated).async { ... }
なぜ期間で.userInitiated
開始していますか?これはObjective Cに従っているのか、それともSwiftに固有のものなのでしょうか?
これは、enumオプションを選択する簡単な方法です。あなたはこの列挙
enum Colors {
case Yellow, Blue, Red, Green
}
を持っているので、もし、あなたがそう
のように、.prefixと列挙型を渡すことができるはずなfunc draw(withColor: Colors) {
}
として、これらのプロパティの1つを使用する機能を持っていました
draw(withColor: .Yellow)
これは次のようになりますするためのショートカットである、より詳細な方法:
draw(withColor: Colors.Yellow)
実際には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
他の答えは非常によく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
:
だから、あなたはこのような何かを書くことができます