Swift中如何向NSArray添加nil值?
如何向NSArray中添加"nil"值?
这个问题我太熟悉了!在Swift和Objective-C交互的场景里,NSArray有个容易踩的小坑——它根本不能直接存储nil!原因其实和Objective-C的底层设计有关:在OC里,nil是用来标记数组、字典这类集合结束的特殊值,所以苹果专门提供了NSNull类来作为集合里的“空占位符”,它是一个合法的对象,完全符合NSArray.init(array:)要求的[Any]类型。
那具体该怎么操作呢?分两种情况来看:
1. 从Swift可选数组转换
如果你手里已经有一个包含nil的Swift可选数组(比如[Any?]),只需要把数组里的nil替换成NSNull(),再传入NSArray的初始化方法就行:
// 示例:包含nil的Swift可选数组 let swiftOptionalArray: [Any?] = ["🍎", nil, "🍌", 100, nil] // 把nil替换为NSNull,得到[Any]类型的数组 let convertedArray = swiftOptionalArray.map { element in element ?? NSNull() } // 初始化NSArray let nsArray = NSArray(array: convertedArray)
2. 直接构建NSArray
如果是直接创建NSArray,直接把NSNull()当作元素放进去就可以:
let nsArray = NSArray(array: ["🍎", NSNull(), "🍌", NSNull()])
注意:从NSArray取值时的处理
后续从NSArray里取元素的时候,记得要判断是否是NSNull,再把它转回Swift的nil:
for element in nsArray { if element is NSNull { print("这个位置原本是nil") } else if let fruit = element as? String { print("水果:\(fruit)") } else if let number = element as? Int { print("数字:\(number)") } }
这样就能完美解决NSArray不能存nil的问题啦!
内容的提问来源于stack exchange,提问作者Sidney Liu
相关产品推荐
相关产品推荐

