swift - 在 Swift 中将匿名数组作为参数传递

标签 swift initialization optional-parameters

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

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/

相关文章:

ios - CoreGraphics - 绘制弧线描边

c++ - 检查初始化列表中的空 vector

c - 获取可选参数?

swift - 函数不返回数组。从匹配 Firebase 数据库文件名的 Firebase Storage 下载照片

arrays - 在 Alamofire 中发布参数

c++ - while(stringstream >> var1 >> var2) 是安全的做法吗?

Java 错误 : New Generic TreeNode Array

java - 有多个可选参数

C# 4.0,可选参数和 params 不能一起工作

objective-c - 不断更新TableView中单元格内的数据