NSArray元素的原因无法与Swift数组元素类型匹配
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NSArray元素的原因无法与Swift数组元素类型匹配相关的知识,希望对你有一定的参考价值。
我从过去2个小时就被困在这里仍然不知道这里到底是怎么回事:
在我的后端我有价值说有名为Dogs
和Cats
的表
我的狗桌的一栏与猫桌有关(一对多的关系)
现在我正试图获取我的狗表的值,但我不断得到变薄的错误:
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
确认猫有价值(预期行为)
任何人都知道为什么会这样?
答案
你已经在Cats
类中声明了你的ViewController
类,这意味着你的数组包含ViewComtroller.Cats
对象,而不是Cats
。
在自己的.swift文件中声明你的Cats
(和你的Dogs
类)
另一答案
这是因为编译器会将@objc添加到NSObject子类中。所以你默认会得到一个NSArray。因此,将@nonobjc添加到您不希望暴露给Objective-C的属性/函数/类中。你会得到Swift Array。
class Dogs : NSObject {
var id : String?
@nonobjc var cats : [Cats]?
}
更新
默认情况下,它不会在Swift 4中添加@objc。
以上是关于NSArray元素的原因无法与Swift数组元素类型匹配的主要内容,如果未能解决你的问题,请参考以下文章
NSArray 元素无法匹配 Swift Array 元素类型
Firebase iOS Swift 致命错误:NSArray 元素无法匹配 Swift Array 元素类型
NSDictionary 与 NSArray 正在转换为元素数组,同时使用 AfNetworking 2 将数据发布到 PHP