【问题标题】:Swift 3 - append an array as 1 item into another arraySwift 3 - 将一个数组作为一项附加到另一个数组中
【发布时间】:2017-08-04 10:57:34
【问题描述】:

此链接:Add an element to an array in Swift 展示了如何将一个项目添加到一个数组中,我的问题是将一个数组作为一个项目添加到另一个数组中。

我没有找到任何类似的问题 - 我有这些数组:

[1,2,3][4,5,6]

我想将第一个数组作为一个整体附加到另一个数组,所以我得到了这个结果:

[4,5,6,[1,2,3]]

请注意,这是不是预期的结果:

[4,5,6,1,2,3]

我将如何实现这一目标?

【问题讨论】:

标签: arrays swift


【解决方案1】:
var a: [Any] = [1,2,3]
var b: [Int] = [3,4,5]
a.append(b) // [1, 2, 3, [3, 4, 5]]

【讨论】:

    【解决方案2】:

    在这种情况下,容器数组的类型应该是[Any],以使其包含intsints数组

    let arr1 = [1,2,3] // by default, it should be of type [Int]
    let arr2:[Any] = [4,5,6,arr1]
    
    print(arr2) // [4, 5, 6, [1, 2, 3]]
    

    请注意,Swift 是强类型的,默认情况下,数组必须是一个整数数组,-不像 Objective-C- 数组不能包含混合数据类型。

    这就是为什么你应该Any 输入:

    Any 可以表示任何类型的实例,包括函数 类型。

    注意:

    仅当您明确需要行为时才使用 Any 和 AnyObject 他们提供的能力。 具体一点总是更好的 您希望在代码中使用的类型。


    访问元素:

    默认情况下,从[Any]数组访问元素的类型应该是Any,例如:

    let numberOne = arr2[0] // type of Any
    let myArray = arr2[3] // type of Any
    

    为了得到想要的数据类型,你应该cast使用as?操作符和可选绑定,如下:

    if let oneInt = arr2[0] as? Int {
        print("one is an Int and it equals to: \(oneInt)")
    } else {
        print("one is NOT ad Int")
    }
    // one is an Int and it equals to: 4
    
    if let oneString = arr2[0] as? String {
        print("one is an Int and it equals to: \(oneString)")
    } else {
        print("one is NOT ad Int")
    }
    // one is NOT ad Int
    

    备注:如果类型不匹配,使用as!操作符会导致应用崩溃。

    let oneInt = arr2[0] as! Int // works fine
    let oneString = arr2[0] as! String // CRASH!
    

    有关as 运算符的更多信息,您可能需要查看此Q&AType Casting 文档。

    【讨论】:

      【解决方案3】:
      var arrayOne = [1,2,3]
      var arrayTwo = [4,5,6]
      

      如果您希望结果为:[4,5,6,[1,2,3]]

      arrayTwo.append(arrayOne)
      

      以上代码将arrayOne转换为单个元素并将其添加到arrayTwo的末尾。

      如果您希望结果为:[4,5,6,1,2,3] 那么,

      arrayTwo.append(contentsOf: arrayOne)
      

      上面的代码会将arrayOne的所有元素添加到arrayTwo的末尾。

      谢谢。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-22
        • 2015-10-11
        • 2020-10-06
        • 2012-03-27
        相关资源
        最近更新 更多