2016-06-04 5 views
3

나는 다음과 같은 방법으로 UISwitch을 추가 해요 :'NSObject ->() -> PostFeed'값을 예상 인수 유형 'AnyObject?'로 변환 할 수 없습니다.

let anonSwitch : UISwitch = { 
    let mySwitch = UISwitch() 
    mySwitch.on = false 
    mySwitch.setOn(false, animated: false); 
    mySwitch.tintColor = UIColor(red: (69/255.0), green: (209/255.0), blue: (153/255.0), alpha: 1.0) 
    mySwitch.addTarget(self, action: #selector(handleAnonSwitch), forControlEvents: .ValueChanged) 

    return mySwitch 
}() 

을 지금은 mySwitch.addTargetself 키워드에 다음과 같은 오류 메시지가 받고 있어요 :

Cannot convert value of type 'NSObject ->() -> PostFeed' to expected argument type 'AnyObject?' 

내가 내 모든 기타에 self를 사용 addTargetUIButton에서 작동하며이 오류가 발생하지 않습니다.

답변

12

letlazy var.

내가 컴파일러는 생각 (또는 미친 오류 메시지가 어디에서 오는) 정확히 모르겠지만 내 생각은 이것이다 : 스위프트에서

, let이 전에 초기화 할 필요가있는 변수 self을 사용할 수 있습니다. 그 이유 중 하나는 컴파일러가 addTarget(action:forControlEvents:)target에 대해 무엇이든간에 anonSwitch()을 호출하려고 시도하지 않는다는 것을 확인할 수 없거나 다른 변수를 액세스하는 것, 즉 anonSwitch 이후에 초기화되는 다른 변수에 액세스하는 것과 같은 다른 작업을하는 것입니다. 이 객체에 대한 초기화가 완료되었습니다. lazy var를 사용

self가 유효한 객체가되기 전에 클래스의 다른 모든 구성원이 초기화 될 때까지이 anonSwitch를 호출 할 수 없습니다 때문에 컴파일러, anonSwitch에 할당 된 값에 액세스 할 수 없습니다 것을 확인 할 수 있음을 의미 .