【问题标题】:Extra argument in call when try to call convenience init, Swift尝试调用便利初始化时,调用中的额外参数,Swift
【发布时间】:2014-08-13 01:14:18
【问题描述】:

我有简单的课程:

class WmAttendee{

    var mEmail:String!
    var mName:String!
    var mType:Int!
    var mStatus:String = "0"
    var mRelationShip:String!

    init( email:String, name:String, type:Int) {
        self.mEmail = email
        self.mName = name
        self.mType = type
    }

     convenience init( email:String,  name:String,  type:Int,  status:String, relationShip:String) {
        self.init(email: email, name: name, type: type)
        self.mStatus = status
        self.mRelationShip = relationShip
    }
}

当我尝试使用 5 个参数测试第二个构造函数时,我得到:Extra argument 'status' in call

var att1 = WmAttendee(email: "myMail", name: "SomeName", type: 1); // OK

var att2 = WmAttendee(email: "mail2", name: "name2", type: 3, status: "2", relationShip: 3)
 // ERROR Extra argument 'status' in call

为什么?我错过了什么吗?

谢谢,

【问题讨论】:

    标签: swift


    【解决方案1】:

    根据您的方法签名:

    convenience init( email:String,  name:String,  type:Int,  status:String, relationShip:String)
    

    relationshipStatus 应该是 String 而不是 Int

    var att2 = WmAttendee(email: "mail2", name: "name2", type: 3, status: "2", relationShip: "3")
    

    由于您没有为 relationshipStatus 传递正确的类型,因此编译器无法匹配方法签名以方便您使用 init 并回退默认的 init(它可以找到的最接近的匹配),它会触发 @987654327 @错误。

    【讨论】:

      【解决方案2】:

      您将错误类型的参数传递给您的函数。 “RelationShip”必须是字符串类型,但您传递的是整数。是的,编译器错误具有误导性,但 swift 仍处于测试阶段。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多