【问题标题】:How can I add a new Item to my multi-type Array in Swift如何在 Swift 中向我的多类型数组添加新项目
【发布时间】:2014-08-23 04:49:36
【问题描述】:

当我在 swift 中使用单一类型数组时,我可以使用不同类型的操作(追加、+= 等)将项目添加到我的数组中,例如此代码有效:

var arr = [1, 2, 3, 4, 5]
arr[0...2] = [-1, -2, -3]
arr += 6
arr.append(-3)
arr += [8, -3, 1, 2]
//arr is now [-1, -2, -3, 4, 5, 6, -3, 8, -3, 1, 2]

但是当我用多种类型的项目初始化我的数组时,它们都不起作用:

var arr = ["Hello", -3, 4.5, "Hi"]
var arr2:AnyObject = ["hi", -3.4, 2]
arr[0...2] = [-1, -6.7, "hello"] // Cannot assign to the result of this expression
arr.append(1.2) // 'NSArray' does not have a member named 'append'
arr += [1, "Error", -3.2] // Could not find an overload for '+=' that accepts the supplied arguments
arr2.append("hello") // 'AnyObject' does not have a member named 'append'
arr.arrayByAddingObject("This works!")
arr2.arrayByAddingObject("This works too!")

我意识到当我使用 AnyObject 时,我的数组变成了一个 NSArray(实际上是 NSMutableArray) 我怎样才能使用 AnyObject 类型创建一个普通的 swift 数组,以便我可以使用有用的操作,如 '+=' 或 append 之类的函数。

【问题讨论】:

    标签: ios objective-c arrays swift xcode6


    【解决方案1】:

    您必须将数组声明为AnyObject[]

    var arr: AnyObject[] = ["Hello", -3, 4.5, "Hi"]
    var arr2: AnyObject[] = ["hi", -3.4, 2]
    arr[0...2] = [-1, -6.7, "hello"]
    arr += "hello"
    arr.append([1, "Error", -3.2])
    arr2 += ["hi", "hiya"]
    arr2.append("hello")
    

    当您尝试添加具有负浮点值的数组时似乎存在错误

    arr += [1, "No Error", 3, -3]
    arr += [-1, "No Error", 3, 3]
    arr += -3.2 // no error
    arr += [1, "Error", -3.2]
    

    【讨论】:

    • 这个答案是错误的。 arr += [1, "Error", -3.2] 仍然失败。 arr.arrayByAddingObject("This works!")arr2.arrayByAddingObject("This works too!") 也是如此
    • 这是一个错误。我测试了它,它确实有效。不是拒绝投票的理由。
    • 恐怕你错了。您使用了与 OP 失败的方法不同的方法。 arr += [1, "Error", -3.2] 给出错误:找不到接受所提供参数的“+=”的重载。试试看。
    【解决方案2】:

    因此,您可以通过将数组声明为来解决前 4 个错误:

    var arr:Array<Any> = ["Hello", -3, 4.5, "Hi"]
    var arr2:Array<Any> = ["hi", -3.4, 2]
    
    arr[0...2] = [-1, -6.7, "hello"]
    arr.append(1.2)
    arr += [1, "Error", -3.2]
    arr2.append("hello")
    

    现在它们是 Swift Arrays 而不是 NSArrays,您不能对它们调用 arrayByAddingObject

    看起来像 NSArray 的强制转换会起作用,但这会导致编译器失败(在操场上)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-17
      相关资源
      最近更新 更多