@objc:使用场景收集:
1、消息机制
今天遇到的一个description问题
点击时间的 响应方法 selector
2、KVC赋值属性
今天正好遇到了一个KVC问题,一个description问题
写一下加强一下印象
代码:
class Emoticon: NSObject {
/// 发送给服务器的表情字符串
@objc var chs: String?
/// 在本地显示的图片名称 + 表情包路径
@objc var png: String?
/// emoji 的字符串编码
@objc var code: String?
init(dict: [String: AnyObject]) {
super.init()
setValuesForKeys(dict)
}
override var description: String {
let keys = ["chs", "png", "code"]
return dictionaryWithValues(forKeys: keys).description
}
override func setValue(_ value: Any?, forUndefinedKey key: String) {}
}
class EmoticonPackage: NSObject {
/// 表情包所在路径
@objc var id: String?
/// 表情包的名称,显示在 toolbar 中
@objc var group_name_cn: String?
/// 表情数组 - 能够保证,在使用的时候,数组已经存在,可以直接追加数据
@objc lazy var emoticons = [Emoticon]()
init(dict: [String: AnyObject]) {
super.init()
// 不会按照顺序调用字典中的 key,不能保证生成 emoticons 数组的时候 id 已经被设置
// setValuesForKeysWithDictionary(dict)
id = dict["id"] as? String
group_name_cn = dict["group_name_cn"] as? String
// 1. 获得字典的数组
if let array = dict["emoticons"] as? [[String: AnyObject]] {
for d in array{
emoticons.append(Emoticon(dict: d))
}
}
}
override var description: String {
let keys = ["id", "group_name_cn", "emoticons"]
return dictionaryWithValues(forKeys: keys).description
}
}
OC负责 响应消息
override var description: String {
let keys = ["id", "group_name_cn", "emoticons"]
return dictionaryWithValues(forKeys: keys).description
}
根据相应消息发送通知,需要把所有keys里面涉及到的的变量加上@objc
/// 表情包所在路径
@objc var id: String?
/// 表情包的名称,显示在 toolbar 中
@objc var group_name_cn: String?
/// 表情数组 - 能够保证,在使用的时候,数组已经存在,可以直接追加数据
@objc lazy var emoticons = [Emoticon]()
OC 里面KVC赋值也是特有的,需要给 需要赋值的属性加上@objc
class Emoticon: NSObject {
/// 发送给服务器的表情字符串
@objc var chs: String?
/// 在本地显示的图片名称 + 表情包路径
@objc var png: String?
/// emoji 的字符串编码
@objc var code: String?
init(dict: [String: AnyObject]) {
super.init()
setValuesForKeys(dict)
}
override func setValue(_ value: Any?, forUndefinedKey key: String) {}
}