Swift: тип XXX должен соответствовать протоколу '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 ""
    }
}

бонусный вопрос : при попытке реализовать переменные класса протокола Objective-C как переменные класса Swift, я получаю ошибку компиляции :

Type DDBItem must conform to protocol 'AWSDynamoDBModeling'

реализация их в качестве функции, похоже, принимается. Почему ?

4 ответов


просто наследовать от NSObject:

class DDBItem : NSObject, AWSDynamoDBModel, AWSDynamoDBModeling {

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)
}