You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift 5中如何像Java一样向函数传递新数组?

嘿,这个问题我之前刚踩过坑!Swift 5里其实有比调用arrayLiteral简洁得多的等价写法,完全符合官方文档的要求~

首先,你不用像Java那样显式创建数组实例再传递,Swift的数组字面量语法就是专门干这个的——直接用方括号把元素包起来就行,比如你要传那三个MyClass实例,直接写[myclass1, myclass2, myclass3]就搞定了,这就是最标准的写法。

结合你给出的实际场景,完整代码应该是这样的:

// 先创建MyClass的实例
let myclass1 = MyClass(name: "First", number: 1, content: "Content 1")
let myclass2 = MyClass(name: "Second", number: 2, content: "Content 2")
let myclass3 = MyClass(name: "Third", number: 3, content: "Content 3")

// 直接用数组字面量初始化MyOtherClass
var myotherclassthing = MyOtherClass(
    name: "Test",
    someotherinfo: "Bla",
    myclassarray: [myclass1, myclass2, myclass3]
)

至于Xcode提示你用arrayLiteral,是因为Swift的数组字面量底层其实是调用了这个初始化器,但官方文档说不要直接调用它的原因就是——我们有更简洁的语法糖啊!直接用方括号写法就好,这才是推荐的使用方式。

如果遇到类型推断不明确的情况(比如编译器没法自动识别数组类型),你可以显式指定类型,比如:

// 两种写法都可以
myclassarray: [MyClass]([myclass1, myclass2, myclass3])
// 或者更简洁的
myclassarray: [myclass1, myclass2, myclass3] as [MyClass]

最后说下segue传递实例的部分:在你的主视图控制器里重写prepare(for:sender:)方法,拿到目标视图控制器后把myotherclassthing传过去就行,示例代码:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    guard let destinationVC = segue.destination as? SecondViewController else {
        return
    }
    destinationVC.myOtherClassInstance = myotherclassthing
}

记得在第二个视图控制器里提前声明一个对应的属性哦~

内容的提问来源于stack exchange,提问作者Neph

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:12:24