ios - 无法快速符合 objective-c 协议(protocol)

标签 ios objective-c swift protocols

我正在尝试实现很棒的库 JSQMessagesViewController但是我不断收到错误“‘ModelMessage’不符合协议(protocol)‘JSQMessageData’”,即使我的类继承自 NSObject 并且我实现了所需的属性

协议(protocol)如下:

@protocol JSQMessageData <NSObject>

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

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

@end

这是我的课

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

}

}

继承自

import Foundation

class Model: NSObject
{

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

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

}

}

最佳答案

在实现没有可空性注释的 ObjC 协议(protocol)时,尝试使用隐式展开的可选值。此外,您可以而且应该始终使用 String 而不是 NSString

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

@objc 注释整个类和/或属性也有帮助。

如果仍然不起作用,请检查构建日志,因为它会告诉您缺少或未正确实现的协议(protocol)功能。

关于ios - 无法快速符合 objective-c 协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30210534/

相关文章:

ios - 重新签署 IPA 文件

objective-c - 从用户数据在 Objective C/C 中创建 Lua 全局变量

ios - 在哪里释放 __block 变量?

ios - 如何以编程方式添加 UI/ View Controller ?

ios - 一台mac创建2个证书

ios - 用于分析数组枚举的死存储消息

ios - 在 UIImageView 中的两个图像之间转换的最佳方式

ios - Metal 着色语言中的浮点精度问题

swift - 在使用协议(protocol)转换访问计算变量期间调用结构体

ios - json数组字符串转换为nsmutablearray