【问题标题】:How to pass Array Values as Separate Parameters in Swift?如何在 Swift 中将数组值作为单独的参数传递?
【发布时间】:2018-11-20 02:15:46
【问题描述】:

我有以下代码使用Bond

combineLatest(settings.userAutoRefreshInterval, config.value?.userRefreshInterval).observeNext { [weak self] _ in
    self?.updateAutoUserRefresh()
}.dispose(in: self.bag)

当然,这有一个构建错误,因为 Bond 的 combineLatest 不接受可选项。

我考虑过写一个if let 并写两次基本相同的代码,但感觉真的很乱。

在 JavaScript 中,您可以将包含每个元素的数组作为单独的参数传递给函数。像下面这样:

function test(a, b, c) {
    console.log("a", a);
    console.log("b", b);
    console.log("c", c);
}

const array = ["Hello", "world", "!!!"];
test(...array);

有没有办法在 Swift 中做到这一点?

如果没有,关于如何让我的代码工作并让它尽可能干净的任何想法?

【问题讨论】:

  • 尚不支持。 This ticket已经开通3年了。
  • @Damon 该功能是 Bond 的一部分。我没有创建它。

标签: ios swift swiftbond


【解决方案1】:

你可以传递一个元组

func test(aTuple: (String, String, String)) {
    print(aTuple.0)
    print(aTuple.1)
    print(aTuple.2)
}

let theTuple = ("Hello", "world", "!!!")
test(aTuple: theTuple)

希望对你有帮助。

【讨论】:

  • 这不是一个真正的数组。所以我绝对不能过滤掉nil/optional 结果。这是我需要做的以使代码更干净。
【解决方案2】:

如果你所有的参数都是同一类型,那么你可以使用varargs参数:

func test(_ args: String...) {
    args.forEach { print $0 }
}

然后你就这样称呼它

test("Life", "Liberty", "Pursuit of Happiness")

【讨论】:

  • 好吧,这看起来很有希望,但我刚刚意识到这似乎需要对 Bond 进行更改,而不是我能做的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-10
  • 1970-01-01
  • 1970-01-01
  • 2013-10-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多