同じコードを何度も何度も繰り返さないように、計算されたプロパティをテンプレートする方法はありますか?例えば、今、私はこのようなコードのブロックを持つクラスがあります。スウィフト計算済みプロパティテンプレート?
private var _state:State?
private var _maxs:State?
private var _state1s:State?
private var _state10s:State?
var state:State? {
get {
dispatch_semaphore_wait(statephore, DISPATCH_TIME_FOREVER)
let s=_state
dispatch_semaphore_signal(statephore)
return s
}
set {
dispatch_semaphore_wait(statephore, DISPATCH_TIME_FOREVER)
_state=newValue
dispatch_semaphore_signal(statephore)
if newValue != nil {statsTest(newValue!)}
}
}
var maxs:State? {
get {
dispatch_semaphore_wait(maxphore, DISPATCH_TIME_FOREVER)
let m=_maxs
dispatch_semaphore_signal(maxphore)
return m
}
set {
dispatch_semaphore_wait(maxphore, DISPATCH_TIME_FOREVER)
_maxs=newValue
dispatch_semaphore_signal(maxphore)
}
}
var state1s:State? {
get {
dispatch_semaphore_wait(state1sphore, DISPATCH_TIME_FOREVER)
let s=_state1s
dispatch_semaphore_signal(state1sphore)
return s
}
set {
dispatch_semaphore_wait(state1sphore, DISPATCH_TIME_FOREVER)
_state1s=newValue
dispatch_semaphore_signal(state1sphore)
}
}
var state10s:State? {
get {
dispatch_semaphore_wait(state10sphore, DISPATCH_TIME_FOREVER)
let s=_state10s
dispatch_semaphore_signal(state10sphore)
return s
}
set {
dispatch_semaphore_wait(state10sphore, DISPATCH_TIME_FOREVER)
_state10s=newValue
dispatch_semaphore_signal(state10sphore)
}
}
をここで明らかなパターンがありますし、すべての繰り返しのコードだけで何が起こっているのか分かりにくく、私はカットとエラーにつながっています/ペースト/編集/失敗。このパターンをキャプチャして、次にプロパティを定義する方法はありますか?
var state=ProtectedValue(_state,statephore)
?
防止すべきリソースの競合がありませんようあなたは、あなたのゲッターでセマフォを必要としません。 – Alexander
Swift 3の動作が起こっている可能性があります(https://github.com/apple/swift-evolution/blob/master/proposals/0030-property-behavior-decls.md) – Kevin
@AMomchilov、この場合の状態は次のとおりです。非同期キュー間で共有されるため、インタフェースを保護する必要があります。それを処理するための最良の方法であるかどうかをまだ知っていますが、私の質問のポイントは、ほぼ同じアクセスパターンを共有する複数のプロパティのアイデアが頻繁に出現するように見えるということです。 – Omegaman