2016-09-23 52 views
0

一个类的实例在迅速的教训我会通过它说,这是一个创建类的实例的有效途径:创建具有参数

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") 

回答

1

因为如果你要创建的对象的英雄,首先你需要使用类名英雄然后在括号与它的参数(名称:“乔治先生”),像这样:

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

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

sirGeorge = (name: "Sir George") 

下联你试图给定类型Heroes新价值的内容类型'(name: String)'和听到您收到的问题。因为你的类型是Heroes而不是'(name: String)'。另一方面,您尝试分配给类的值构造函数。

0

,当你做到这一点 sirGeorge =(名称:“乔治先生”) 就像是你要分配(名称:“乔治先生”),以sirGeorge这是错误的,因为sirGeorge是类英雄

的对象,以便这是r飞行方式

sirGeorge =英雄(名称: “乔治先生”)

,因为现在你初始化你的对象。它就像调用的init(可以说初始化函数)和初始化需要一个字符串“乔治先生”

0

线路1:let sirGeorge: Heroes

在这里,你正在创建Heroes类型的常量sirGeorge。这是对的。唯一值sirGeorge可以采取必须是Heroes类型,没有别的。

线路2:sirGeorge = (name: "Sir George")

在这里,你正在分配sirGeorge的值类型为(name: "Sir George"),而不是Heroes的。因此,为了将值分配给sirGeorge你需要创建一个实例Heroes,即,

sirGeorge = Heroes(name: "Sir George") 

这将调用init(name: String)的Heroes