2014-12-17 6 views
0

다음은 내가 수행하려고 시도하는 몇 가지 샘플 코드입니다. 다음NSTimer의 UserInfo가 올바른 정보를 전달하지 않음 - Swift

func firstFunction() { 
    var timer = NSTimer.scheduledTimerWithTimeInterval(0.6, target: self, selector: Selector("secondFunction:"), userInfo: self.data!.getInfo(), repeats: false); 
    println("Info: \(timer.userInfo)"); 
} 

func secondFunction(value: Int) { 
    println("Called with \(value)"); 
} 

출력입니다 : Info: Optional(( 2 )) 지속적으로 너무 변화 ############로 호출

Called with 140552985344960. self.data!.getInfo 대신 숫자 만 사용하더라도 여전히 출력으로 Info: Optional(2)이 나오고 호출 된 출력은 계속 변경됩니다. 전달되는 값이 선택 사항이므로 문제가 발생한다고 생각합니다. 문제가있는 경우 선택 사항이되지 않도록하려면 어떻게해야합니까?

+0

다음 secondFunction가 매개 변수로 NSTimer을 가져야한다 : 당신은 당신이 타이머의 userInfo, 전 내에 저장된 값에 액세스하려는 경우 그래서 secondFunction:해야는 매개 변수로 NSTimer를 지정 타이머의 사용자 정보를 얻으려면 ... –

+0

NSDictionary를 사용하여 데이터를 저장하려고 시도했지만 아무런 차이가 없었습니다. userInfo가 단일 매개 변수를 객체로 취할 수 있었던 다른 예제를 보았습니다. – Ricca

답변

3

NSTimerscheduledTimerWithTimeIntervaluserInfo 매개 변수입니다 하지 당신이 AnyObject를 개최 userInfo을 설정할 수 있지만 대부분의 기능 때문에 scheduledTimerWithTimeInterval와 마찬가지로, 당신은 단순히 매개 변수에 통과 할 수 있다는 의미에서 표준 매개 변수의 선택 만이 하나의 매개 변수로 NSTimer으로 전달 될 수 있습니다. 당신이 원하는 경우

func firstFunction() { 
    var timer = NSTimer.scheduledTimerWithTimeInterval(0.6, target: self, selector: Selector("secondFunction:"), userInfo: self.data!.getInfo(), repeats: false); 
    println("Info: \(timer.userInfo)"); 
} 

func secondFunction(timer: NSTimer) { 
    var value = timer.userInfo as Int 
    secondFunction(value) 
} 

// Function added based on your comment about 
// also needing a function that accepts ints 
func secondFunction(value: Int) { 
    println("Called with \(value)"); 
} 
+0

self.data! .getInfo()는 NSTimer에 대한 getInfo 함수가 아니라 호출 할 일반 함수입니다. 출력 결과가'Info : Optional (2)'인 것을 보여 주었다고 생각했습니다. 따라서 NSTimer를 매개 변수로 사용하지 않고 다른 일부 함수의 출력으로 사용하고 싶지 않습니다. – Ricca

+0

@Ricca 솔직히 말해서,이 코드를 사용해 내가 무슨 뜻인지 알아보십시오. 함수의 출력은 실제로 NSTimer의 userInfo 속성에 포함될 것입니다. –

+0

@Ricca 그런 다음 두 개의 별도 매개 변수를 허용하는 두 개의 개별 기능이 필요합니다. 방법을 알려주기 위해 업데이트하겠습니다. 추신 다시 말하면, 정수를 scheduledTimerWithTimeInterval 선택기 함수로 전달할 수 있다고 가정하지는 않습니다. –