如何在 Swift 中声明特定类型的 NSArray?
How do I declare an NSArray of a specific type in Swift?
我需要通过引用传递一个数组(因为被调用的函数会修改它,并且更改应该反映在调用站点)。由于 Swift 数组通过值和 NSArrays 传递,通过引用,我尝试将函数声明为:
func save(_ photos: NSMutableArray<Photo>) {
但是 Xcode 说我不能特化一个非通用类型的 NSMutableArray。所以我必须这样做:
func save(_ photos: NSMutableArray) {
这会失去类型安全性。有没有一种方法可以同时拥有类型安全和按值传递?
您无法专门化 NSMutableArray — 只有 Objective-C 可以做到这一点(具有讽刺意味,不是吗?)。然而,你真的不需要。
相反,只需将 photos
声明为 inout [Photo]
。您仍将按值传递,但您将能够将修改后的数组写回到它来自的任何地方。
简单示例:
var originalArray = [1,2,3]
func modifyArray(_ array: inout [Int]) {
array = Array(array.dropFirst())
}
modifyArray(&originalArray)
originalArray // [2,3]
我需要通过引用传递一个数组(因为被调用的函数会修改它,并且更改应该反映在调用站点)。由于 Swift 数组通过值和 NSArrays 传递,通过引用,我尝试将函数声明为:
func save(_ photos: NSMutableArray<Photo>) {
但是 Xcode 说我不能特化一个非通用类型的 NSMutableArray。所以我必须这样做:
func save(_ photos: NSMutableArray) {
这会失去类型安全性。有没有一种方法可以同时拥有类型安全和按值传递?
您无法专门化 NSMutableArray — 只有 Objective-C 可以做到这一点(具有讽刺意味,不是吗?)。然而,你真的不需要。
相反,只需将 photos
声明为 inout [Photo]
。您仍将按值传递,但您将能够将修改后的数组写回到它来自的任何地方。
简单示例:
var originalArray = [1,2,3]
func modifyArray(_ array: inout [Int]) {
array = Array(array.dropFirst())
}
modifyArray(&originalArray)
originalArray // [2,3]