我的应用程序中有一个简单的类:
class MyClass{
var Name: String
var Foo1: Bar
var Foo2: Bar?
//var Foos: [Bar]
}
Foo1
永远不会为零,并且 Foo2
是可选的,所以它可能是零。
与其拥有像下面这样的初始化,不如拥有一个列表属性 Foos: [Bar]
, 可能包含 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))
Cannot use mutating member on immutable value: function call returns immutable value
我如何将填充的匿名列表传递给 Swift 中的初始化程序,就像我在 C# 中所做的那样?
最佳答案
试试这段代码
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 中的工作原理
关于swift - 在 Swift 中将匿名数组作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53585812/