Swift 将元素添加到可选数组时显示为零?

Swift 将元素添加到可选数组时显示为零?,swift,Swift,下面是我得到的: 所有者类 宠物班 PetType类 所有者类别 此类仅声明类型为pet?的变量pet 宠物类 这个类只是声明了一个空数组PetType PetType类 两个存储变量:petType(例如Dog)和petName(例如Harris)以及一个基本init方法,该方法采用两个参数:petType和petName 注意:这一切都是在操场上完成的 我在这里做错了什么?Owner有一个从未初始化过的属性。通过内联操作: class Owner { var pet: Pet?

下面是我得到的:

  • 所有者类
  • 宠物班
  • PetType类
所有者类别

此类仅声明类型为pet?的变量pet

宠物类

这个类只是声明了一个空数组PetType

PetType类

两个存储变量:petType(例如Dog)和petName(例如Harris)以及一个基本init方法,该方法采用两个参数:petTypepetName

注意:这一切都是在操场上完成的


我在这里做错了什么?

Owner
有一个从未初始化过的属性。通过内联操作:

class Owner {
    var pet: Pet? = Pet()
}
您的代码按预期工作

如果不希望以内联方式初始化,则必须使用
Owner
相应地修改代码:

let owner = Owner()
var firstPet = PetType(petType: "Dog", petName: "Harris")

owner.pet = Pet() // <-- here you have to initialize the `pet` property
owner.pet?.pets.append(firstPet)
owner.pet?.pets[0].petName
let owner=owner()
var firstPet=PetType(PetType:“Dog”,petName:“Harris”)

owner.pet=pet()/作为owner类中的宠物是可选的,除非您分配宠物对象或使用init创建宠物对象,否则您将获得零。可选值是使用强制展开(这意味着您非常确定该值将出现在optional中),如果您不确定optional的值,则可以使用optional绑定。 因此,解决方案是:

 let owner = Owner()
 owner.pet = Pet()

 var firstPet = PetType(petType: "Dog", petName: "Harris")
 owner.pet!.pets.append(firstPet)
 owner.pet!.pets[0].petName

你正在严重扰乱你的类型的语义结构
petName
应该在
Pet
中,一只宠物只能有一种宠物类型,一个主人可以有多只宠物。@justin rose..好吧…我喜欢这个问题..我得到了同样的错误,并通过内联初始化来解决它..antonio发布了答案..但现在我知道我的实际错误是什么了,我不会在内联中这样做,因为主人不一定要养宠物。我不建议也不鼓励出于任何原因使用强制拆封,除非有严格的需要-在我看来,这是一种不好的做法,而且会造成比好处更多的问题。如果您不确定是否存在价值,您可以使用可选绑定,在这种情况下,我敢肯定值是存在的,即使我同意你的观点,安东尼奥强制展开可能会使你的程序(应用程序)崩溃。
let owner = Owner() // returns {nil}
var firstPet = PetType(petType: "Dog", petName: "Harris") // returns {petType "Dog" petName "Harris"}
owner.pet?.pets.append(firstPet) // returns nil
owner.pet?.pets[0].petName // returns nil
class Owner {
    var pet: Pet? = Pet()
}
let owner = Owner()
var firstPet = PetType(petType: "Dog", petName: "Harris")

owner.pet = Pet() // <-- here you have to initialize the `pet` property
owner.pet?.pets.append(firstPet)
owner.pet?.pets[0].petName
 let owner = Owner()
 owner.pet = Pet()

 var firstPet = PetType(petType: "Dog", petName: "Harris")
 owner.pet!.pets.append(firstPet)
 owner.pet!.pets[0].petName