繁体   English   中英

Swift:类型XXX必须符合协议'NSObjectProtocol'

[英]Swift : Type XXX must conform to protocol 'NSObjectProtocol'

我正在尝试实现一个必须的Swift类

  1. 从Objective-C类继承
  2. 使用类变量实现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 ""
    }
}

Bonus问题:当试图将Objective-C协议强制类变量实现为Swift类变量时,我收到一个编译错误:

Type DDBItem must conform to protocol 'AWSDynamoDBModeling'

将它们作为函数实现似乎是可以接受的。 为什么?

只是继承自NSObject:

class DDBItem : NSObject, AWSDynamoDBModel, AWSDynamoDBModeling {

为了存档,自我回答。

添加时

override func isEqual(anObject: AnyObject?) -> Bool {
    return super.isEqual(anObject)
}

我的班级,它的工作原理。 此方法应该已从基类继承。

看起来像Swift / Xcode 6.1中的一个错误

对于那些偶然发现这篇文章的人来说,只是一个头脑。 AWSDynamoDBModeling协议已在最新的SDK(v2.1.1)中进行了更改。 必需的函数: dynamoDBTableNamehashKeyAttribute必须是静态的。 截至今日(2015年5月27日)的文件似乎已过时。

例:

class Dingle:AWSDynamoDBObjectModel, AWSDynamoDBModeling {

    static func dynamoDBTableName() -> String! {
        return "dev_coupons"
    }

    static func hashKeyAttribute() -> String! {
        return "status "
    }

    func rangeKeyAttribute() -> String! {
        return "post_date"
    }

    override func isEqual(object: AnyObject?) -> Bool {
        return super.isEqual(object)
    }
}

确认! 以这种方式编写函数:

static func dynamoDBTableName() -> String {


    return "pb_Test"

}


static func hashKeyAttribute() -> String {



    return "ID"
}

你必须包括这个:

override func isEqual(anObject: AnyObject?) -> Bool {
   return super.isEqual(anObject)
}

暂无
暂无

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

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