2016-08-11 1 views
1

구조체에 객체가 포함 된 함수가 있으면 구조체에 값 의미가 유지됩니까? 예 :Swift의 함수, 구조체 및 값 의미 :

struct MyStruct { 
    var x = 3 

    func setX() { 
     let y = NSNumber(value: 2) 
     x = y.intValue 
    } 
} 

struct에는 참조가있는 멤버가 없으므로 value 의미 체계가 있어야합니다. 함수 setX()에 참조 멤버 y이 있다는 사실 때문에 MyStruct에서 참조 의미를 사용합니까?

+3

내가 여기 질문이 표시되지 않습니다. "Value semantics 유지 보수"가 너무 막연합니다. –

+2

MyIntClassWrapper 란 무엇입니까? 함수 구문이 잘못되었습니다. - 기대되는 출력과 실제 출력을 가진 자체적 인, 컴파일 가능한 * 예제가 도움이 될 것입니다. –

+2

이것은 REPL 또는 놀이터에서 매우 쉽게 조사 할 수 있습니다. 이 문제를 직접 조사한 다음 더 정확하게 타겟팅 된 질문으로 돌아가는 것이 좋습니다. –

답변

0

mutating의 구조체는 다른 구조체와 동일한 값의 의미를 유지합니다.

setX을 호출하면 다른 인스턴스가 아니라 다른 인스턴스가 아닌 다른 인스턴스가 복제됩니다 (참조 유형과 같이 공유 인스턴스가 아닌).

당신은 this example에서 직접 확인할 수 있습니다

struct Counter { 
    var count: Int 

    mutating func increment() { 
     count += 1 
    } 
} 

var x = Counter(count: 0) 
let y = x // a copy is made 

print("x: \(x)") // x: Counter(count: 0) 
print("y: \(y)") // y: Counter(count: 0) 

x.increment() 

print("x: \(x)") // x: Counter(count: 1), method target affected 
print("y: \(y)") // y: Counter(count: 0), copy unaffected