首页 > 解决方案 > 在 Swift 中传递匿名数组作为参数

问题描述

我的应用程序中有一个简单的类:

class MyClass{
    var Name: String
    var Foo1: Bar
    var Foo2: Bar?
    //var Foos: [Bar]
}

Foo1永远不会是 nil,并且Foo2是可选的,所以它可能是 nil。

我宁愿拥有一个Foos: [Bar]可能包含 1 或 2 个元素的 list 属性,而不是像下面这样的 init。

init(_ Name: String, _ Foo1: Bar, _ Foo2: Bar?){
    self.Name = Name
    self.Foo1 = Foo1
    self.Foo2 = Foo2
}

在 C# 中,我会写类似MyClass m = new MyClass("m", New List<Bar>{Bar1, Bar2})or的东西MyClass m = new MyClass("m", New List<Bar>{Bar1, null})。我宁愿将一个属性MyClass作为一个列表,而不是两个单独的字段,其中一个字段可能为 nil。

我试过这个初始化程序:

init(_ Name: String, _ Foos: [Bar]) {
    self.Name = Name
    self.Foos = Foos
}

但是当我尝试将匿名列表传递给初始化程序时,我收到了以下警告:

let m = MyClass("m", [Bar]().append(B1))

不能对不可变值使用变异成员:函数调用返回不可变值

如何将填充的匿名列表传递给 Swift 中的初始化程序,就像我在 C# 中所做的那样?

标签: swiftinitializationoptional-parameters

解决方案


试试这个代码

struct Bar { }

class MyClass {
    var name: String
    var foos: [Bar?]

    init(name: String, foos: [Bar?]) {
        self.name = name
        self.foos = foos
    }
}

let bar0 = Bar()
let bar1: Bar? = nil
let object = MyClass(name: "String", foos: [bar0, bar1])

希望你明白了。并阅读更多关于它如何在 Swift 中工作的信息


推荐阅读