【发布时间】:2014-11-08 07:18:17
【问题描述】:
我正在尝试实现一个必须的 Swift 类
- 从 Objective-C 类继承
- 使用类变量实现 Objective-C 协议。
虽然我子类化的 Objective-C 类是从 NSObject 继承的,但我收到以下编译错误:
Type DDBItem must conform to protocol 'NSObjectProtocol'
我继承/实现的 Objective-C 类和 Objective-C 协议可在 https://github.com/aws/aws-sdk-ios/blob/master/DynamoDB/AWSDynamoDBObjectMapper.h
AWSDynamoDBModel 有很长的继承链,最终以 NSObject 开始 AWSDynamoDBModeling 强制执行两个类变量。
我的代码是
class DDBItem : AWSDynamoDBModel, AWSDynamoDBModeling {
// class var dynamoDBTableName : String { get { return "" }}
// class var hashKeyAttribute : String { get { return "" }}
class func dynamoDBTableName() -> String! {
return ""
}
class func hashKeyAttribute() -> String! {
return ""
}
}
奖励问题:当尝试将 Objective-C 协议强制类变量实现为 Swift 类变量时,我收到编译错误:
Type DDBItem must conform to protocol 'AWSDynamoDBModeling'
似乎可以接受将它们作为函数来实现。为什么?
【问题讨论】:
-
第二个问题,property就是语法糖,在做桥接的时候,我猜编译器对OC property做了语法糖映射,让它们像Swift中的property。但是 OC 中没有类级别的属性,并且 +() 是一个方法,编译器只是将它映射到一个快速的类级别方法。只能用 A.classmethod() 调用。
-
对于第一个问题,我不知道发生了什么。即使您从直接从 NSObject 继承的 MTLModel 继承,错误仍然存在。这意味着深层嵌套不是问题,而是 MLTModel 实现。
-
好点,我来看看 MLTModel 的实现
-
mmmh,直接继承自 MTLModel 作品 ... class DDBItem : MTLModel
-
但是一旦我添加协议,编译错误就会出现(类型必须符合 NSObjectProtocol),即使使用“class DDBItem : NSOBject, AWSDynamoDBModeling {”
标签: ios objective-c swift amazon-dynamodb