2017-05-09 6 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 { 
    ... 
} 

が、私はそれは完全にあなたの問題を解決するかどうかはわかりません。

Objective-Cのクラスおよびメソッドは、常にオープンとしてインポートされている:openキーワード、インポートされたObjective-Cのコードのためのルールである(強調鉱山)を導入SE-0117: Allow distinguishing between public access and public overridabilityによれば

。つまり、Objective-Cクラスの合成ヘッダーは、publicopenをそのインターフェイスに置き換えることになります。

もちろん、JSQMessagesが純粋なObjective-Cで実装されているとします。

1

私は

self.senderId = "my ID" 
self.senderDisplayName = "Wozniac" 
関連する問題