Ios 创建和调用类初始化器并传入文本值时调用中的额外参数

Ios 创建和调用类初始化器并传入文本值时调用中的额外参数,ios,xcode,class,swift,variables,Ios,Xcode,Class,Swift,Variables,我在斯威夫特有个小问题。比如说我有一门课叫Pet。 Pet有一个名称和噪波变量,如下所示: class Pet { var name : String = "" var canMakeNoise : Bool = true } 现在,当我调用Initialize创建类(比如说一只猫)时,我可以很容易地这样做: var cat: Pet() cat.name = "Garfield" cat.canMakeNoise = false 但是,当尝试使用以下文字值直接传递时,这会很

我在斯威夫特有个小问题。比如说我有一门课叫Pet。 Pet有一个名称和噪波变量,如下所示:

class Pet
{
    var name : String = ""
    var canMakeNoise : Bool = true
}
现在,当我调用Initialize创建类(比如说一只猫)时,我可以很容易地这样做:

var cat: Pet()
cat.name = "Garfield"
cat.canMakeNoise = false
但是,当尝试使用以下文字值直接传递时,这会很顺利:

let cat : Pet("Garfield",true) 

我得到这个错误:

Swift编译错误-调用中的额外参数


为什么呢?我怎样才能修好它?提前谢谢

如果要向初始值设定项添加参数,则需要指定新的init函数,而不是依赖默认函数。以下是您在您的案例中的做法:

class Pet {
    var name : String = ""  
    var canMakeNoise : Bool = true

    init( name : String, canMakeNoise : Bool ) {
       self.name = name
       self.canMakeNoise = canMakeNoise
    }
}

var kitty = Pet(name: "Cat", canMakeNoise: true)

因为变量使用默认值,所以xCode不需要初始值设定项。因此,当您创建类的新实例时,它将是一个
Pet
,具有
name=”“
canMakeNoice=true

如果要更改这些默认值,则需要提供一个init方法(并且可以删除这些默认值)

我在这里提供了两个init方法。第一个参数包含两个参数:

var cat: Pet = Pet(name: "Kitten", canMakeNoise: true)
这将使用提供的名称和提供的
canMakeNoise
创建一个
Pet

如果需要,还可以提供一个
便利初始化
这是一个缩短的初始化。在这种情况下,您可以创建
Pet
类的另一个实例

var dog: Pet = Pet(name: "Doggy")

正如您所见,我们在这里不提供
canMakeNoise
属性,因为便利初始值设定项为我们提供了该属性(并使用
true
作为
canMakeNoice

谢谢。工作起来就像一个charmBy,为init方法提供一个默认参数
canMakeNoise
事件可以避免convinience init方法
swift类Pet{var name:String var canMakeNoise:Bool init(name:String,canMakeNoise:Bool=true){self.name=name self.canMakeNoise=canMakeNoise}}宠物(名字:“猪”)宠物(名字:“蝴蝶”,canMakeNoise:false)
var cat: Pet = Pet(name: "Kitten", canMakeNoise: true)
var dog: Pet = Pet(name: "Doggy")