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