【发布时间】:2018-12-02 23:57:36
【问题描述】:
我的应用程序中有一个简单的类:
class MyClass{
var Name: String
var Foo1: Bar
var Foo2: Bar?
//var Foos: [Bar]
}
Foo1 永远不会是 nil,Foo2 是可选的,所以它可能是 nil。
我宁愿拥有一个列表属性 Foos: [Bar],而不是像下面这样的 init,它可能包含 1 或 2 个元素。
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}) 或 MyClass m = new MyClass("m", New List<Bar>{Bar1, null}) 的东西。我宁愿将MyClass 中的一个属性作为列表,而不是两个单独的字段,其中一个字段可能为零。
我试过这个初始化器:
init(_ Name: String, _ Foos: [Bar]) {
self.Name = Name
self.Foos = Foos
}
但是当我尝试将匿名列表传递给初始化程序时,我收到以下警告:
let m = MyClass("m", [Bar]().append(B1))
不能对不可变值使用变异成员:函数调用返回不可变值
如何将填充的匿名列表传递给 Swift 中的初始化程序,就像我在 C# 中所做的那样?
【问题讨论】:
标签: swift initialization optional-parameters