@objc 키워드는 어떻게됩니까?
addTarget
의 action
매개 변수는 당신이 목표 - C 함수에 대한 포인터로 생각할 수있는하는 Selector
입니다. 함수에 대한 선택자를 얻으려면이 함수는 Objective-C로 작성된 Apple 프레임 워크에서 호출되기 때문에 Objective-C
으로 볼 수 있어야합니다. 1) 클래스가 NSObject
의 하위 클래스이거나 NSObject
(예 : UIViewController
)을 상속하는 클래스에서 상속되어야하거나 2) Swift 함수에 @objc
특성을 추가하여 해당 클래스를 노출해야하는 경우 Objective-C에 대한 신속한 방법.
MyClass.handleButton (_ :)의 밑줄?
밑줄은 handleButton
의 첫 번째 인수를 나타냅니다. Objective-C에서 첫 번째 매개 변수의 이름은 지정되지 않으므로 Swift에서 _
으로 표시됩니다. 매개 변수의 이름이 지정되지 않은 와일드 카드입니다.
MyClass.handleButton(_:)
은 하나의 매개 변수를 사용하는 MyClass
클래스에 정의 된 handleButton
이라는 함수를 지정합니다.
당신의 handleButton
이 같은 두 개의 매개 변수, 촬영 한 경우 :
@objc func handleButton(button: UIButton, forEvent event: UIEvent) {
}
다음 선택이되었을 것이다 #selector(MyClass.handleButton(_:forEvent:))
이
handleButton
가
forEvent
라는 이름의 두 번째와 2 개 개의 인수를 취하는 것을 보여주는.
선택기를 지정할 때 전체 이름보다 적게 지정할 수 있습니다. 클래스 이름을 다음과 같이 쓸 수 있습니다.
컴파일러는 현재 클래스에서 함수를 찾습니다.
클래스에서 오직 하나 개 handleButton
기능 (이 과부하되지는) 당신도 인수 사양을 생략 할 수있는 경우 :
handleButton의 인수 후
#selector(handleButton)
느낌표?여기
@objc private func handleButton(sender: UIButton!)
{
}
는 UIButton!
은 당신이 (!
로) 그 랩을 해제하지 않고도 사용할 수있는 옵션을 의미하는 옵션 암시 적으로 풀어 입니다. 이렇게하면 호출자는 UIButton
에 대한 참조 대신 nil
을 전달할 수 있지만 sender
을 사용하려고 시도하면 언제든지 충돌 할 수 있습니다.
선택 사항 일 필요는 없습니다. 항상 UIButton
을 전달하므로 불필요한 !
을 제거하십시오.
Swift에서 프로그램 방식으로 버튼을 설정하는 더 좋은 방법이 있습니까?
내가 이미 언급 한 선택기의 단축키 이외에 다른 것은 아닙니다.
스위프트는이 경우 계층 적이므로이 경우 obj-c보다 느리지 않습니까?
Objective-C 런타임에 인터페이스하고 있습니다. Apple 엔지니어는 똑똑하고 신속하고 효율적으로 작업합니다. 이것의 효율성은 특히 사용자가 버튼을 누를 때만 호출되는 사용자 인터페이스 메소드 (예 : 수백만 초가 아닌)에 대해 걱정해야 할 사항이 아닙니다.
'@ objc'는 속성입니다. 'handleButton (_ :)'은 함수에 대한 참조입니다. 'UIButton!'은 암묵적으로 언 래핑 된 선택적 타입입니다. – jtbandes
'@ obj-c'는 private 메소드를 obj-c에 공개합니다. 당신의 행동이 사적인 것이 아니었다면 그것을 사용하지 않아도됩니다. 그것이 이유가 있습니까? – Ike10