swift - 在 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# 中所做的那样?
解决方案
试试这个代码
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 中工作的信息
推荐阅读
- php - 为什么在 zip->extractto 期间会出现 maxpathlen 错误?
- vue.js - Vuetify 数据表正文中的分组行
- azure-web-app-service - Azure Blob 存储 - 静态站点分析
- iis - IIS 重写/应用程序请求路由 (ARR) 半工作
- javascript - 使用 URLSearchParams 和 $.param() 替换 url 请求中的数组参数
- java - maven clean 和 eclipse clean 的区别
- javascript - 我想在 p5.js 的代码中添加图像而不是三角形
- powerbi - 基于测量值的 PowerBI 动态分箱(范围变化)
- python - 当我计算 Pandas 单元格中的点数时,如何解决此错误?
- mongodb - MongoDB - 我的用户文档是否应该包含项目 ID 列表?