Swift: тип XXX должен соответствовать протоколу 'NSObjectProtocol'
Я пытаюсь реализовать класс 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'
реализация их в качестве функции, похоже, принимается. Почему ?
4 ответов
Self ответил для архивирования.
при добавлении
override func isEqual(anObject: AnyObject?) -> Bool {
    return super.isEqual(anObject)
}
для моего класса это работает. Этот метод должен быть унаследован от базового класса.
похоже на ошибку в Swift / Xcode 6.1 для меня
просто головы для тех, кто натыкается на этот пост. AWSDynamoDBModeling протокол был изменен в последнем SDK (v2.1.1). Необходимые функции: 
dynamoDBTableName и hashKeyAttribute должен быть статическим. Документации по состоянию на сегодня (5/27/2015) представляется устаревшим.
пример:
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)
}