2015-02-02 1 views
-2

예심으로 & 오류 스위프트에서 튜플과 가변성에 대한 몇 가지 사실을 발견했지만 실제 규칙을 배우고 싶습니다. 이러한 코드를 생각해튜플 변경 가능성에 대한 규칙은 무엇입니까?

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 같은 고정 된 참조 동작 (당신은 개체의 같은 구성원에게 그냥 주요 참조를 변경할 수 있습니다). 따라서 C#에서는 readonly과 같습니다.

그러나 b은 상수 값처럼 동작합니다. 위의 코드는 컴파일되지 않습니다. 터플의 모든 멤버에 let (또는 var)이 적용된다고 말할 수 있습니다.

하지만 제 생각에 제 질문에서 다시 생각해 봅니다. 튜플과 그 변경 가능성에 대한 규칙은 무엇입니까?

+0

가능한 복제본 [값에 의한 신속한 전달 또는 참조로 전달] (http://stackoverflow.com/questions/27364117/is-swift-pass-by-value-or-pass-by-reference) – matt

+0

@ matt, 내 질문에 대한 실제 답변을 만들려면 튜플이 값 형식 ('struct') 또는 참조 ('class')로 정의되었는지 알고 있어야하지만이 정보도 찾을 수 없습니다. – greenoldman

+1

@ greenoldman Swift 가이드에 설명 된대로 튜플은 복합 데이터 유형입니다. 따라서 'let'으로 정의하면 해당 멤버와 해당 멤버가 변경되지 않습니다. –

답변

1

The Swift Programming Language: The Basics에서 설명한 것처럼 튜플은 Swift의 복합 유형입니다. 따라서 유형이 튜플 인 let이라는 상수 변수를 만들면 튜플의 모든 값도 일정 해집니다.

관련 문제