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
相关产品推荐
相关产品推荐

