如何在swift中为NSArray添加零值?
NSArray.init(数组:[Any])如何在swift中为NSArray添加零值?,swift,swift4,Swift,Swift4,NSArray.init(数组:[Any]) NSArray有一个初始函数,其参数为[Any]。但不是[Any?],因此,如何将nil值添加到此数组?NSArray/NSMutableArray不允许在数组中存储nil值。这就是为什么Swift API都不允许可选值的原因 如果您真的需要为nil做一些事情,请使用NSNull(),尽管我不能100%确定这将如何处理核心数据 斯威夫特实际上是为你做的。如果您传递一个Swift选项数组,任何nil值都将转换为NSNull。例如: var array
NSArray有一个初始函数,其参数为[Any]。但不是[Any?],因此,如何将nil值添加到此数组?
NSArray
/NSMutableArray
不允许在数组中存储nil
值。这就是为什么Swift API都不允许可选值的原因
如果您真的需要为nil做一些事情,请使用NSNull()
,尽管我不能100%确定这将如何处理核心数据
斯威夫特实际上是为你做的。如果您传递一个Swift选项数组,任何nil
值都将转换为NSNull
。例如:
var array = [Int?]()
array.append(4)
array.append(nil)
let nsa = array as NSArray
print(nsa) // (4, "<null>")
print(type(of: nsa[1])) // NSNull
var数组=[Int?]()
array.append(4)
array.append(nil)
设nsa=数组作为NSArray
打印(nsa)/(4“”)
打印(类型:nsa[1])//NSNull
请注意,在Swift 4.0下使用
let nsa=NSArray(array:array)
而不是let nsa=array as NSArray
在没有警告的情况下工作,但在Swift 4.1下会发出警告。为什么要在Swift中使用NSArray
?为什么不使用Swift数组?@rmaddy因为将数组保存到核心数据应该是NSArray,所以我必须使用NSArray.NSArray/NSMUTABLEARRY不允许您在数组中存储nil
值。@rmaddy所以我保存了一个可选值,例如“var array:[[Int]?]”和“NSArray(array:array)”,它只是给我一个警告表达式从'[Int]?'隐式强制为Any,并且它也正常工作,所以我是否应该使此警告静音?(NS)Core Data不支持数组作为属性。Core Data使用Set
@CLOX如果您在从CoreData获取数据后尽早转换为SwiftArray
,并在推送到CoreData之前最晚可能的时间转换为NSArray,您在Swift世界中的日子会轻松得多。@rmaddy:您的示例是我会在第4行收到警告,它说强制展开可以避免。将第4行替换为让nsa=array作为NSArray
@vacawama和CLOX我发布的代码不会收到错误或警告。它在Xcode 9.2(Swift 4.0)中正常工作游乐场。但建议的更改仍然很好。@vacawama是Swift 4.2中的NSArray(array:)
的不可静音警告(您需要说让nsa=NSArray(array:array as[Any])
来确认选项的删除)但是在大多数情况下,作为NSArray的是做桥接的首选方法。