NSArray元素的原因无法与Swift数组元素类型匹配

时间:2016-08-06 09:43:59

标签: ios swift2

我从过去的2个小时到这里仍然不知道这里到底是怎么回事:

在我的后端我有值表示有名为DogsCats

的表

我的狗桌上的一栏与猫桌有关(一对多关系)

现在我试图获得我的狗桌的价值,但我不断变得错误:

fatal error: NSArray element failed to match the Swift Array Element type

我的代码:

//object classes 
class Dogs : NSObject {
    var id : String?
    var cats : [Cats]?
}

class Cats : NSObject {
    var rats : [Rats]?
    var name : String?
}

在这里,我从我的后端检索了狗类,之后

for dog in dogs  { // dogs is an array of Dogs Object
print(dog.id) // expected output 
print((dog.cats) // here i'm getting the error 

在调试器中,dog.cats的值为:

id  String? "dog1"
cats    [MyPackage.ViewController.Cats]?    Some

我还通过打印返回总对象的dog.cats.count确认猫有价值(预期行为)

任何人都知道为什么会这样?

2 个答案:

答案 0 :(得分:3)

您已在Cats类中声明了ViewController类,这意味着您的数组包含ViewComtroller.Cats个对象,而不是Cats

在自己的.swift文件中声明您的Cats(和您的Dogs类)

答案 1 :(得分:1)

这是因为编译器会将@objc添加到NSObject子类中。因此,默认情况下您将获得NSArray。因此,将@nonobjc添加到您不希望向Objective-C公开的属性/函数/类中。而你将获得Swift Array。

class Dogs : NSObject {
    var id : String?
    @nonobjc var cats : [Cats]?
}

更新

默认情况下,它不会在Swift 4中添加@objc。