Есть ли способ шаблонов вычисляемых свойств, чтобы избежать повторения одного и того же кода снова и снова? Например, прямо сейчас у меня есть класс с блоком кода, который выглядит следующим образом:Шаблоны с быстрым вычислением?
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