2017-05-09 3 views
3

몇 가지 이유로 JSQMessages를 사용하여 Swift 3의 메서드를 재정의 할 수 없습니다. 나는 오류 그러나JSQMessages는 Swift 3 메서드를 재정의 할 수 없습니다.

override func senderId() -> String { 
    return User.Wozniak.rawValue 
} 

override public func senderDisplayName() -> String! { 
    return getName(.Wozniak) 
} 

: 나는 JSQMessagesViewController를 서브 클래스 때

이러한 방법은 내가 같은 메소드를 구현하려고 JSQMessagesCollectionViewDataSource

public func senderDisplayName() -> String!

public func senderId() -> String!

에 정의되어 있습니다 슈퍼 클래스의 메소드를 오버라이드하지 않는다는 것입니다. 재정의를 제거하면 Obj-C 선택기와 충돌합니다.

+0

가 그냥 궁금해서 다음과 같은 속성으로 빠른 3에서이 기능을 구현하지만 기능에 "@objc"속성을 추가하면 어떻게됩니까? – BonanzaDriver

+0

비슷한 문제 [여기] (http://stackoverflow.com/q/41344287/3687801) 및 [여기] (http://stackoverflow.com/q/25788782/3687801). 그들 중 누구라도 당신의 문제를 해결하는지보십시오. – nayem

답변

0

대신이 시도 할 수 있습니다 :

open override func senderId() -> String { 
    ... 
} 

하지만 완전히 문제가 해결됩니다 있는지 확실하지 않습니다.

오브젝티브 C 클래스와 메소드는 항상 개방로 가져옵니다 다음 open 키워드, 수입 목표 - C 코드에 대한 규칙이 있습니다 (강조 광산을) 소개 SE-0117: Allow distinguishing between public access and public overridability에 따르면,

. 이것은 Objective-C 클래스의 합성 된 헤더가 공용으로 열고을 인터페이스로 보급 할 것임을 의미합니다.

물론 JSQMessages이 아직 순수한 목표 -C로 구현되어 있다고 가정합니다.

1

나는

self.senderId = "my ID" 
self.senderDisplayName = "Wozniac" 
관련 문제