gpt4 book ai didi

swift - Swift 类中的 let 定义只分配一次,还是每个实例分配一次?

转载 作者:搜寻专家 更新时间:2023-10-30 22:15:06 25 4
gpt4 key购买 nike

假设我有以下简单的 Swift 类:

class Burrito {
enum Ingredients {
case beans, cheese, lettuce, beef, chicken, chorizo
}

private let meats : Set<Ingredients> = [.beef, .chicken, .chorizo]

var fillings : Set<Ingredients>

init (withIngredients: Set<Ingredients>) {
fillings = withIngredients
}

func isVegetarian() -> Bool {
if fillings.intersect(meats).count > 0 {
return false
}
else {
return true
}
}
}

如果我在应用程序中创建多个 Burrito 实例,那么 Set meats 是否在内存中定义一次,与为每个实例分配的内存分开?我假设编译器会以这种方式进行优化,但我还没有找到答案。

编辑

在已接受的答案以及有关 isVegetarian() 方法中逻辑的注释的大力帮助下,这是修改后的类。谢谢大家!

class Burrito {
enum Ingredients {
case beans, cheese, lettuce, beef, chicken, chorizo
}

private static let meats : Set<Ingredients> = [.beef, .chicken, .chorizo]

var fillings : Set<Ingredients>

init (withIngredients: Set<Ingredients>) {
fillings = withIngredients
}

func isVegetarian() -> Bool {
return fillings.intersect(Burrito.meats).isEmpty
}

// All burritos are delicious
func isDelicious() -> Bool {
return true
}
}

最佳答案

meats 是该类的一个实例变量。 meats 的新实例将为该类创建的每个新实例(对象)创建。

您可以使用static 关键字使它成为一个静态变量,这将使它只有一个meats 变量的实例,它在所有实例之间共享类(class)成员。

不可变实例变量通常用作对象范围的常量(而不是类范围的,如不可变静态变量),它可以为每个对象具有独立的定义。在这种情况下,定义是静态的,因此智能编译器可以将其优化为静态变量。无论如何,您应该明确标记此 static 以向用户传达此变量的意图。

关于swift - Swift 类中的 let 定义只分配一次,还是每个实例分配一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37864791/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com