【问题标题】:How to cast a swift array of tuples to NSMutableArray?如何将一个快速的元组数组转换为 NSMutableArray?
【发布时间】:2016-08-05 07:39:12
【问题描述】:

我有 swift 元组数组 [(String, String)] 并希望将此数组转换为 NSMutableArray。我已经尝试过了,但它不起作用:

let myNSMUtableArray = swiftArrayOfTuples as! AnyObject as! NSMutableArray

【问题讨论】:

  • 你不能。更改二维数组的元组[[String]] 并将其另存为[AnyObject]

标签: arrays swift casting nsmutablearray


【解决方案1】:

由于像 TupleStruct 这样的 swift 类型在 Objective-C 中没有等价物,因此它们不能转换为或引用为 AnyObject,而 NSArrayNSMutableArray 将它们的元素类型限制为。

如果你必须从一个 swift 元组数组中返回一个 NSMutableArray,那么下一个最好的方法可能是返回一个 2 元素数组的数组:

let itemsTuple = [("Pheonix Down", "Potion"), ("Elixer", "Turbo Ether")]
let itemsArray = itemsTuple.map { [$0.0, $0.1] }
let mutableItems = NSMutableArray(array: itemsArray)

【讨论】:

  • NSMutableArray(array: itemsArray) 这是诀窍
【解决方案2】:

您正在尝试做的事情有两个问题:

  • Swift 数组可以转换为NSArray,但不能在不构造副本的情况下转换为NSMutableArray
  • Swift 元组没有 Cocoa 对应项,因此您不能将它们或包含它们的 Swift 集合强制转换为 Cocoa 类型。

以下是您如何从 String 对象的 Swift 数组构造 NSMutableArray

var arr = ["a"]
arr.append("b")
let mutable = (arr as AnyObject as! NSArray).mutableCopy()
mutable.addObject("c")
print(mutable)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-06
    • 2021-08-23
    • 1970-01-01
    相关资源
    最近更新 更多