2015-02-02 4 views
-2

В пробной версии & ошибка Я нашел некоторые факты о кортежах и изменчивости в Swift, но хотел бы узнать о реальных правилах. Рассмотрим такой код:Каковы правила для tuple mutability?

class T 
{ 
    var f : String = "hello" 
} 

let a = T(); 
let b = (f : "hello", ""); 
a.f = "world"; 
b.f = "world"; 
println(a.f) 
println(b.f) 

a ведет себя как фиксированные ссылки (вы можете изменить любой элемент, который, как объекта, просто не главное задание). Так что это как readonly в C#.

Но b ведет себя скорее как постоянное значение - вышеуказанный код не компилируется. Можно сказать, что let (или var) применяется ко всем членам кортежа.

Но это догадывается с моей стороны - так что возвращаюсь к моему вопросу. Каковы правила для кортежей и их изменчивости?

+0

Возможный дубликат [Is Swift Pass By Value или Pass By Reference] (http://stackoverflow.com/questions/27364117/is-swift-pass-by-value-or-pass-by-reference) – matt

+0

@ matt, чтобы дать реальный ответ на мой вопрос, я должен был бы знать, если кортеж определяется как тип значения ('struct') или reference one (' class'), но эту информацию я также не могу найти. – greenoldman

+1

@greenoldman, как указано в руководстве Swift, кортежи представляют собой сложные типы данных. Поэтому, определяя его как 'let', он делает его и его« членов »неизменным. –

ответ

1

Как указано в The Swift Programming Language: The Basics, кортежи являются составными типами в Swift. Поэтому, если вы создаете постоянную переменную с let, которая имеет тип кортежа как тип, все значения в кортете становятся постоянными.

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