2017-05-09 1 views
3

Aus irgendeinem Grund kann ich Methoden in Swift 3 mit JSQMessages nicht überschreiben.JSQMessages kann die Methode nicht überschreiben. Swift 3

Diese Verfahren sind in den JSQMessagesCollectionViewDataSource

public func senderDisplayName() -> String!

public func senderId() -> String!

Wenn ich JSQMessagesViewController Unterklasse Ich versuche, die Methoden als solche zu implementieren:

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

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

Jedoch habe ich den Fehler dass es keine Methode von seiner Superklasse überschreibt. Wenn ich die Überschreibung entferne, sagt es, dass es mit einem Obj-C Selektor kollidiert.

+0

Einfach nur neugierig, aber was passiert, wenn Sie den „@objc“ -Attribut zu den Funktionen hinzufügen? – BonanzaDriver

+0

Ähnliche Probleme [hier] (http://stackoverflow.com/q/41344287/3687801) und [hier] (http://stackoverflow.com/q/25788782/3687801). Schauen Sie nach, ob einer von ihnen Ihr Problem löst. – nayem

Antwort

0

Sie könnten versuchen Sie stattdessen: vollständig

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

aber ich bin nicht sicher, ob es das Problem zu beheben.

Nach SE-0117: Allow distinguishing between public access and public overridability, die die open Schlüsselwort einführt, sind die Regeln für importierte Objective-C-Code (Hervorhebung von mir):

Objective-C-Klassen und Methoden werden immer als offen importiert. Dies bedeutet, dass der synthetisierte Header für eine Objective-C-Klasse in seiner Schnittstelle public durch open ersetzen würde.

Natürlich vorausgesetzt, JSQMessages ist noch in reinem Objective-C implementiert.

1

Ich habe diese Funktionalität in swift 3 mit folgenden Eigenschaften implementiert

self.senderId = "my ID" 
self.senderDisplayName = "Wozniac" 
Verwandte Themen