如何将Java代码中的super()构造器调用转换为对应Swift语法
问题解答
正确Swift实现代码
public class BFactory : CompositeFactory { // 先修正入参类型:Java byte[]对应Swift的[UInt8](字节数组) init(input: [UInt8]) { // 调用父类构造器,需匹配父类构造器的参数标签 super.init(input: input, maxSize: CompositeFactory.MAX_SIZE) } }
关键说明
- 你原Swift代码的构造器入参类型有误:Java中的
byte[]是字节数组,对应Swift的[UInt8]类型,你写的UInt8是单个字节类型,和原Java逻辑不匹配,需先调整。 - Swift中调用父类构造器的规则:子类的指定构造器完成自身所有存储属性的初始化工作后,必须显式调用父类的指定构造器,格式为
super.init(参数标签: 参数值),参数标签需要和父类CompositeFactory的构造器定义完全匹配:- 如果父类构造器定义为
init(input: [UInt8], maxSize: Int),直接使用上面给出的写法即可 - 如果父类构造器定义时省略了外部参数标签(比如
init(_ input: [UInt8], _ maxSize: Int)),则可以直接写super.init(input, CompositeFactory.MAX_SIZE),和你注释里的写法逻辑一致。
- 如果父类构造器定义为
内容的提问来源于stack exchange,提问作者hasan kaleli
相关产品推荐
相关产品推荐

