简体   繁体   English

迅速不符合Objective-C协议

[英]Cannot conform to objective-c protocol in swift

I'm trying to implement the awesome library JSQMessagesViewController but I keep getting the error "'ModelMessage' does not conform to protocol 'JSQMessageData'" even though my class inherit from NSObject and I implement the required properties 我正在尝试实现很棒的库JSQMessagesViewController,但是即使我的类继承自NSObject并实现了所需的属性,我仍然收到错误消息“'ModelMessage'不符合协议'JSQMessageData'”

Here is the protocol: 这是协议:

@protocol JSQMessageData <NSObject>

@required
 - (NSString *)senderId;
 - (NSString *)senderDisplayName;
 - (NSDate *)date;
 - (BOOL)isMediaMessage;
 - (NSUInteger)messageHash;

 @optional
 - (NSString *)text;
 - (id<JSQMessageMediaData>)media;

@end

and here is my class 这是我的课

import Foundation

class ModelMessage: Model, JSQMessageData {

/* Required */
var senderId: NSString
var senderDisplayName: NSString
var date: NSDate
var isMediaMessage: Bool
var messageHash: UInt
/**/

var text_: String

var id:String!
var conversationId: String!
var imageUrl: String?
var recipientId: String!
var recipientRead: Bool!

var avatar: NSData?


init(data: NSDictionary){

    super.init()

    /* Required */
    self.senderId = getStringFromJSON(data, key:"senderId")
    self.senderDisplayName = "Me"
    let dateString = getStringFromJSON(data, key: "timeStamp")
    let dateDouble = (dateString as NSString).doubleValue / 1000.0
    self.date = NSDate(timeIntervalSince1970: dateDouble)
    self.isMediaMessage = false
    /**/

    self.text_ = getStringFromJSON(data, key:"text")

    self.id = getStringFromJSON(data, key:"id")
    self.conversationId = getStringFromJSON(data, key:"conversationId")
    self.recipientId = getStringFromJSON(data, key:"recipientId")
    self.recipientRead = data["recipientRead"] as! Bool

}

}

which inherit from 继承自

import Foundation

class Model: NSObject
{

func getStringFromJSON(data: NSDictionary, key: String) -> String {

    if let info = data[key] as? String{
        return info
    }
    return ""

}

}

Try using implicitly unwrapped optionals when implementing ObjC protocols without nullability annotations. 在实现没有可空性注释的ObjC协议时,请尝试使用隐式解包的可选对象。 Also you can and should always use String instead of NSString . 同样,您可以并且应该始终使用String而不是NSString

var senderId: String!
var senderDisplayName: String!
var date: NSDate!
var isMediaMessage: Bool
var messageHash: UInt

Annotating the whole class and/or the properties with @objc could also help. @objc注释整个类和/或属性也可能有帮助。

If that still doesn't work then check the build log as it will tell you what protocol function is missing or not implemented correctly. 如果仍然无法解决问题,请检查构建日志,因为它会告诉您缺少什么协议功能或未正确实施协议功能。

try this 尝试这个

import Foundation

class ModelMessage: NSObject , JSQMessageData {

/* Required */
var senderId: NSString
var senderDisplayName: NSString
var date: NSDate
var isMediaMessage: Bool
var messageHash: UInt
/**/

var text_: String

var id:String!
var conversationId: String!
var imageUrl: String?
var recipientId: String!
var recipientRead: Bool!

var avatar: NSData?


init(data: NSDictionary){

    super.init()

    /* Required */
    self.senderId = getStringFromJSON(data, key:"senderId")
    self.senderDisplayName = "Me"
    let dateString = getStringFromJSON(data, key: "timeStamp")
    let dateDouble = (dateString as NSString).doubleValue / 1000.0
    self.date = NSDate(timeIntervalSince1970: dateDouble)
    self.isMediaMessage = false
    /**/

    self.text_ = getStringFromJSON(data, key:"text")

    self.id = getStringFromJSON(data, key:"id")
    self.conversationId = getStringFromJSON(data, key:"conversationId")
    self.recipientId = getStringFromJSON(data, key:"recipientId")
    self.recipientRead = data["recipientRead"] as! Bool

}

func getStringFromJSON(data: NSDictionary, key: String) -> String {

    if let info = data[key] as? String{
        return info
    }
    return ""

}


}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM