【问题标题】:Swift: do I need to create a new immutable array for function return?Swift:我需要为函数返回创建一个新的不可变数组吗?
【发布时间】:2018-03-23 05:25:22
【问题描述】:

假设一个函数/方法有一个本地可变数组,而函数/方法的返回类型是一个不可变数组。创建要返回的新不可变数组是一种常见做法:

- (NSArray *)someArray {
    NSMutableArray *array = [NSMutableArray array]
    // ...do something with array
    return array.copy
}

但是,在 Swift 中,既然数组是值类型,我还需要这样做吗?

func someArray() -> [MyValue] {
    var array = [MyValue]()
    // do something with array
    return array // or return Array(array)?
}

【问题讨论】:

  • 只返回数组。在 Swift 中,数组是值类型并被复制(尽管在您的情况下,它没有被复制,但这是一个您不必关心的棘手的实现细节)。

标签: objective-c arrays swift immutability


【解决方案1】:

你的例子:

func someArray() -> [MyValue] {
    var array = [MyValue]()

    //...do something with array
    return array
}

这将取决于您如何使用该功能。

如果你这样做:

  1. let arrTest = someArray()
    • let 将使 arrTest 不可变
  2. var arrTest = someArray()
    • var 将使 arrTest 可变

Arrays 在 swift 中是 Structs,Structs 是值类型,所以你的函数 someArray() 基本上是返回数组的副本。
在函数内部创建数组并不能确定它的可变性。


所以回答你的问题:

不!您不需要这样做。
只需在 swift 中正常创建数组即可。

【讨论】:

  • "在函数内部创建数组并不能确定它的可变性。"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-17
  • 1970-01-01
  • 2016-03-30
  • 2013-12-08
  • 2022-01-15
  • 1970-01-01
  • 2017-01-10
相关资源
最近更新 更多