gpt4 book ai didi

ios - let 声明需要一个初始化表达式

转载 作者:搜寻专家 更新时间:2023-10-30 21:50:27 26 4
gpt4 key购买 nike

我正在阅读 The Swift Programming Language,在简单值部分

“Use let to make a constant and var to make a variable. The value of a constant doesn’t need to be known at compile time, but you must assign it a value exactly once”

所以我觉得我可以做到这一点

let aConstant:Int
aConstant = 5

但是我得到let declarations require an initializer expression !!

这是为什么呢? “编译时不需要知道常量的值”是什么意思?

最佳答案

来自Swift Language Reference :

When a constant is declared at global scope, it must be initialized with a value.

您只能延迟类/结构中常量的初始化,您可以选择在类/结构的初始化程序中对其进行初始化。

“常量的值不需要在编译时知道”的意思是指常量的值。在 C/Objective-C 中,需要为全局常量分配一个可以由编译器计算的值(通常是 10@"Hello")。以下内容在 Objective-C 中是不允许的:

static const int foo = 10; // OK
static const int bar = calculate_bar(); // Error: Initializer element is not a compile-time constant

在 Swift 中你没有这个限制:

let foo = 10 // OK
let bar = calculateBar(); // OK

编辑:

原答案中下列说法不正确的是:

You can only defer initialization of a constant in classes/structs, where you can choose to initialize it in the initializer of the class/struct.

唯一不能延迟的地方是全局范围(即顶级 let 表达式)。虽然确实可以在类/结构中延迟初始化,但这不是唯一的地方。例如,以下也是合法的:

func foo() {
let bar: Int
bar = 1
}

关于ios - let 声明需要一个初始化表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24125028/

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