Я пытаюсь создать оболочку вокруг функций IOS OSTestAndSet()
и OSTestAndClear()
для использования с атомным логического типа на основе следующих GitHub code:Swift атомная булева
class AtomicBoolean {
private var val: Byte = 0
/// Sets the value, and returns the previous value.
/// The test/set is an atomic operation.
func testAndSet(value: Bool) -> Bool {
if value {
return OSAtomicTestAndSet(0, &val)
} else {
return OSAtomicTestAndClear(0, &val)
}
}
/// Returns the current value of the boolean.
/// The value may change before this method returns.
func test() -> Bool {
return val != 0
}
}
Однако я получаю ошибку компилятора для декларации собственности, которая гласит: Use of undeclared type 'Byte'; did you mean to use 'UInt8'?
В настоящее время я импортирую Фонд для этого файла кода. Я видел, что другие записи stackoverflow используют тип Byte, но я не смог найти, почему это не доступно в моем случае.
Я использую следующую версию Swift: компании Apple Swift версии 1.2 (swiftlang-602.0.53.1 лязг-602.0.53)
Кроме того, если изменить тип данных, чтобы Uint8, как компилятор предполагает, я получают дополнительные ошибки в вызовах OSAtomicTestAndSet() и OSAtomicTestAndClear(), которые заявляют следующее: Cannot assign to immutable value of type 'UInt8'
, несмотря на то, что я использую объявление var
, а не let
.
'Byte' был удален как typealias в Swift 1.2 (я думаю, и не раньше). Вместо этого используйте 'UInt8'. Я не вижу вашу вторую ошибку в Xcode 6.4 (Swift 1.2). – vacawama
@vacawama Спасибо. Для второй ошибки я пытался определить ее как структуру вместо класса, но я думаю, что это не работает с указателями. Я честно не знаком с этими деталями Свифта. – Dragonspell
Посмотрите мой ответ ниже. байт работает с typealias и struct работает с мутирующим ключевым словом. – vacawama