2014-07-26 2 views
11

Я хочу преобразовать в Swift из кода Objective-C, как показано ниже;Как объявить изменчивые переменные в Swift

int sum = 0; 
x = 1; 
for (int i = 0; i < 100; i++) { 
    sum += x; 
} 

x можно из других потоков. Таким образом, x объявляется изменчивой переменной.

volatile int x; 

Как написать этот код в Swift?

+11

'volatile' не делает переменную доступной из других потоков. Он используется для указания того, что переменная ведет себя как аппаратный регистр. Вместо этого используйте блокировку мьютекса. – Potatoswatter

+1

Этот вопрос не соответствует теме, поскольку исходное помещение неверно, поскольку volatile не делает, как вы утверждаете, поэтому мы не можем его преобразовать – Mark

+0

Извините за мой плохой псевдокод. Я знаю, что сказал Potatoswatter. При портировании моего кода Objective-C требуется volatile, потому что другой поток может обновлять переменную x, а ссылки должны указывать самое последнее значение. –

ответ

-1

В Swift у вас есть доступ к более мощным средствам выражения глобальной синхронности значений - особенно на уровне типа - чем ключевое слово volatile. Например, вы можете выбрать блокировки для синхронизации доступа для чтения и записи к переменной. Вы можете использовать MVar, чтобы указать, что переменная должна иметь только одно допустимое состояние для нескольких потоков. Или вы можете просто не указывать проблему в Swift. Поскольку язык вытесняет изменчивые квалификаторы из импортированного кода, кажется, что приложения, которые хотят использовать эту функцию, должны придерживаться использования C или Objective-C и представлять интерфейс для любого заинтересованного кода Swift.

+0

Не могли бы вы рассмотреть этот вопрос http://stackoverflow.com/questions/34601888/does-every-pure-function-should-have-fixed-points и прояснить свои мысли? Заранее спасибо. – MainstreamDeveloper00

Смежные вопросы