2014-09-10 5 views
1

Swift에서 포인터에 대한 포인터를 어떻게 작성합니까? Objective-C에는 반복적으로 호출하여 반복 횟수를 추적 할 수있는 함수가 있었지만 Swift에서이를 달성하는 방법에 관해서는 난처한 편입니다. 이 게시물에 대한이 샘플을 절단하는 과정에서 Swift 함수의 포인터 매개 변수에 대한 포인터

NSNumber *recursionCount = [NSNumber numberWithInteger:-1]; 
[self doRecursion:&recursionCount]; 

- (void)doRecursion:(NSNumber **)recursionCount { 
    // I'm sure this is a terrible way to increment, but I have limited Objective-C experience 
    // and this worked, so I moved on after failing to find a decent var++ equivalent :-(
    int addThis = (int)i + 1; 
    *recursionCount = [NSNumber numberWithInt:[*recursionCount intValue] + addThis]; 
    [self doRecursion:recursionCount]; 
} 

, 나는 끝없는 루프를 생성 결국했지만, 당신은 내가 각 재귀 값을 기억하고있어 방법에 대한 아이디어를 얻을.

누구나 스위프트에서이 작업을 수행하는 방법을 알고 있습니까? 감사.

답변

6

신속하게 포인터를 사용하는 것은 매우 바람직하지 않습니다.

인수로 전달 된 변수를 함수로 변경하려면 inout 수정자를 사용하여 포인터를 전달하는 것과 마찬가지로 참조로 전달해야합니다. 나는 10 번 반복 후 중지하는 함수의 로직을 변경했습니다 :

func doRecursion(inout recursionCount: Int) -> Int { 
    if (recursionCount < 10) { 
     ++recursionCount 
     doRecursion(&recursionCount) 
    } 

    return recursionCount 
} 

은 그럼 당신은 사용하여 호출 할 수 있습니다

var counter: Int = -1 
let x = doRecursion(&counter) // Prints 10 in playground 

연구 교재 : In-Out Parameters

+0

감사합니다. 나는 inout 매개 변수에 대한 섹션을 놓치거나 건너 뛰었어야합니다. 나는 심지어 AutoreleasingUnsafeMutablePointer 과 UnsafeMutablePointer 을 시도했지만 슬픔의 길을 인도했다. :) –

관련 문제