프로토콜 확장 컴파일러 오류의 Swift 2.2 #selector

안드레아 :

신속한 2.2 이전에 완벽하게 작동하는 데 사용되는 프로토콜 확장이 있습니다.

이제 new를 사용하라는 경고가 #selector있지만 추가하면

Objective-C 선택기로 선언 된 메서드가 없습니다.

이 몇 줄의 코드에서 문제를 재현하려고했습니다.이 코드는 쉽게 복사하여 놀이터에 붙여 넣을 수 있습니다.

  protocol Tappable {
    func addTapGestureRecognizer()
    func tapGestureDetected(gesture:UITapGestureRecognizer)
}

extension Tappable where Self: UIView {
    func addTapGestureRecognizer() {
        let gesture = UITapGestureRecognizer(target: self, action:#selector(Tappable.tapGestureDetected(_:)))
        addGestureRecognizer(gesture)
    }
}

class TapView: UIView, Tappable {
    func tapGestureDetected(gesture:UITapGestureRecognizer) {
        print("Tapped")
    }
}

프로토콜의 해당 메서드에 추가하라는 제안도 @objc있지만 그렇게하면이를 구현하는 클래스에도 추가하라는 메시지가 표시되지만 일단 추가하면 클래스가 더 이상 프로토콜을 따르지 않습니다. 프로토콜 확장에서 구현을 보지 못하는 것 같습니다.
이것을 올바르게 구현하려면 어떻게해야합니까?

someoneAnyone :

비슷한 문제가있었습니다. 여기 내가 한 일이 있습니다.

  1. 프로토콜을 @objc로 표시했습니다.
  2. 기본 동작으로 확장 한 모든 메서드를 선택 사항으로 표시했습니다.
  3. 그런 다음 Self를 사용했습니다. #selector에서.

    @objc public protocol UpdatableUserInterfaceType {
      optional func startUpdateUITimer()
      optional var updateInterval: NSTimeInterval { get }
      func updateUI(notif: NSTimer)
    }
    
    public extension UpdatableUserInterfaceType where Self: ViewController {
    
      var updateUITimer: NSTimer {
        return NSTimer.scheduledTimerWithTimeInterval(updateInterval, target: self, selector: #selector(Self.updateUI(_:)), userInfo: nil, repeats: true)
      }
    
      func startUpdateUITimer() {
        print(updateUITimer)
      }
    
      var updateInterval: NSTimeInterval {
        return 60.0
      }
    }
    

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Swift 2 프로토콜 확장 사용

Swift 2, 프로토콜 확장 및 respondsToSelector

Swift 2 : UITableViewDataSource 프로토콜 확장

swift2의 프로토콜 확장 및 기본값 제한

Swift 2의 프로토콜을 준수하여 유형 배열 확장

Swift 프로토콜 확장 재정의

SWIFT의 클래스 프로토콜 오류에 대한 #selector

Swift 2-오류를 발생시키는 @objc 프로토콜

@objc 프로토콜의 associatedtype에서 Swift 컴파일러 충돌

Objective-C 유형에 대한 Swift 2 프로토콜 확장 및 적합성

SQLite.swift 포드 : Xcode 8.3 베타 2의 Swift 컴파일러 오류

Swift 확장의 프로토콜에 대한 일반 유형 준수

Structs의 프로토콜 확장으로 인해 비 프로토콜 유형으로 제한된 컴파일 오류 'Self'가 발생합니다.

C #을 F #으로 변환하는 2 개의 컴파일러 오류 처리

Swift 컴파일러 오류 : " 'Watermark'유형이 'ViewModifier'프로토콜을 준수하지 않습니다."

확장을 사용하여 Swift의 프로토콜 준수

init의 Swift 프로토콜 확장 자체 참조 문제

Swift 2.0의 프로토콜 확장 메서드 디스패치

일반 기능을 매개 변수로 취하는 일반 프로토콜의 Swift 4 확장 기능

선택기 오류를 사용하는 Swift 3 프로토콜 확장

Swift : 프로토콜 확장의 정적 var에 프로토콜 구현 유형 저장

Swift 2의 프로토콜을 따르는 UIView 유형의 변수 선언

Swift 2 MKMapViewDelegate rendererForOverlay 컴파일러 경고

SwiftUI의 확장을 사용하여 CLLocationCoordinate2D에 Hashable 프로토콜을 추가하는 방법

프로토콜 확장에서 돌연변이 기능을 사용하는 Swift 2 오류 "불변 값에 돌연변이 멤버를 사용할 수 없습니다 : 'self'는 불변입니다.

Chrome 확장 프로그램의 Wasm 모듈 컴파일 오류

객체가 클래스이고 프로토콜을 따르는 Swift의 프로토콜 확장

오류 : 컴파일러 로그 확인

프로토콜 오류에 대한 Xcode 7 베타 5 Swift 2 중복 적합성

TOP 리스트

  1. 1

    Matlab의 반복 Sortino 비율

  2. 2

    ImageJ-히스토그램 빈을 변경할 때 최대, 최소 값이 변경되는 이유는 무엇입니까?

  3. 3

    Excel : 합계가 N보다 크거나 같은 상위 값 찾기

  4. 4

    C #에서 'System.DBNull'형식의 개체를 'System.String'형식으로 캐스팅 할 수 없습니다.

  5. 5

    원-사각형 충돌의 충돌 측면을 찾는 문제

  6. 6

    Oracle VirtualBox-설치를 위해 게스트를 부팅 할 때 호스트 시스템이 충돌 함

  7. 7

    어떻게 아무리 "나쁜", ANY의 SSL 인증서와 HttpClient를 사용하지합니다

  8. 8

    Ubuntu는 GUI에서 암호로 사용자를 만듭니다.

  9. 9

    잘못된 상태 예외를 발생시키는 Apache PoolingHttpClientConnectionManager

  10. 10

    Python 사전을 사용하는 동안 "ValueError : could not convert string to float :"발생

  11. 11

    openCV python을 사용하여 텍스트 문서에서 워터 마크를 제거하는 방법은 무엇입니까?

  12. 12

    Vuetify 다중 선택 구성 요소에서 클릭 한 항목의 값 가져 오기

  13. 13

    C ++ VSCode에서 같은 줄에 중괄호 서식 지정

  14. 14

    Cassandra에서 버전이 지정된 계층의 효율적인 모델링

  15. 15

    JQuery datepicker 기능이 인식되지 않거나 새 프로젝트에서 작동하지 않음

  16. 16

    cuda 11.1에서 Pytorch를 사용할 때 PyTorch가 작동하지 않음: Dataloader

  17. 17

    jfreecharts에서 x 및 y 축 선을 조정하는 방법

  18. 18

    상황에 맞는 메뉴 색상

  19. 19

    마우스 휠 JQuery 이벤트 핸들러에 대한 방향 가져 오기

  20. 20

    매개 변수에서 쿼리 객체를 선언하는 방법은 무엇입니까?

  21. 21

    Maven은 아이 프로젝트 대상 폴더를 청소하지

뜨겁다태그

보관