使用参数

时间:2016-09-23 09:54:00

标签: swift

在一个快速的课程中,我通过它说这是创建类实例的有效方法:

class Heroes
{
    var (name, gender, kingdom) = ("","","")
    var (level, ad, hp) = (0,0,0)

    init(name: String)
    {
        self.name = name
    }
}

以下部分是造成此错误的原因 "cannot assign value of type '(name: String)' to type 'Heroes'

let sirGeorge: Heroes
sirGeorge = (name: "Sir George")

以下方式运行正常,但我不理解上述方法的语法,也不了解编译器。是否有一种新的方式在Swift 3中写这个呢?

var sirLance = Heroes(name: "Sir Lancelot")

4 个答案:

答案 0 :(得分:1)

因为如果你想创建对象Heroes,首先需要使用Class Name Heroes 然后使用括号的括号(名称:" Sir George" ),像这样:

let sirGeorge: Heroes
sirGeorge = Heroes(name: "Sir George")

答案 1 :(得分:0)

let sirGeorge: Heroes

您使用let和名称sirGeorge创建常量,并将常量的类型设置为Heroes。它是值参考数据类型。

sirGeorge = (name: "Sir George")

您尝试使用类型为Heroes的新值指定内容类型'(name: String)'的第二行并听到您收到问题。因为您输入的内容为Heroes而非'(name: String)'。另一方面,您尝试分配给类的值构造函数。

答案 2 :(得分:0)

当你这样做的时候 sirGeorge =(姓名:"乔治爵士") 就像你想分配(姓名:"乔治爵士")到sirGeorge这是错误的,因为sirGeorge是班级英雄的对象

所以这是正确的方法

sirGeorge =英雄(名字:"乔治爵士")

因为现在你正在初始化你的对象。这就像调用init(比如说init函数)和init需要一个String" Sir George"

答案 3 :(得分:0)

第1行: let sirGeorge: Heroes

在这里,您要创建sirGeorge类型的常量Heroes。这是对的。唯一值sirGeorge可以采用Heroes类型,而不是其他任何内容。

第2行: sirGeorge = (name: "Sir George")

您在此处为sirGeorge分配了(name: "Sir George")而非Heroes类型的值。因此,为了将值赋给sirGeorge,您需要创建Heroes的实例,即

sirGeorge = Heroes(name: "Sir George")

这将调用init(name: String的{​​{1}}。