Swift の楽しみとして、代わりに具体化された API をGCD
. だから私はこれを遊び場に投げました:
import Foundation
typealias DispatchQueue = dispatch_queue_t
extension DispatchQueue {
static var main:DispatchQueue {
return dispatch_get_main_queue()
}
}
let main = DispatchQueue.main
しかし、これは最後の行でエラーを引き起こします:
Static member 'main' cannot be used on instance of type 'DispatchQueue.Protocol' (aka 'OS_dispatch_queue.Protocol')
これが何を言っているのかわかりません。つまり、私はそれを読みました。しかし、私は本当の問題を見ていません。Double
のようなものの型変数をどのように持っているかを調べましたNaN
が、同様の種類のアクセサーで別の型を拡張できない理由がわかりません。
(私は違いなしで別のものを試しましたtypealias
)
更新: @Kametrixom の回答はすぐには役に立ちませんでしたが、最終的にはおそらく貢献しました。電球が点灯するために私がしなければならなかったことは次のとおりです。
class Foo {
static var Bar:Int {
return 42
}
}
Foo.Bar --> 42
わかりました、それはうまくいきました。今は構造体です。
struct Yik {
static var Yak:Int {
return 13
}
}
Yik.Yak --> 13
それもうまくいきました。拡張されたデフォルト実装を持つプロトコル:
protocol Humble { }
extension Humble {
static var Pie:Int {
return 23
}
}
Humble.Pie --> DOES NOT WORK
ただし、プロトコルを使用してクラスまたは構造体を拡張します。
extension Foo: Humble { }
Foo.Pie --> 23
そして、それは機能します。私が犯していた間違い (だと思いますか?) は、Humble 型のファースト クラスのインスタンスが実行されていて、その動作が付加されていると想定したことでした。むしろ、構造体/クラス型に追加される動作の単なるテンプレートです。
質問のタイトルを変更しました。そして答えはノーです。