gpt4 book ai didi

swift - 界面 : do { } in Swift

转载 作者:搜寻专家 更新时间:2023-11-01 06:11:38 25 4
gpt4 key购买 nike

将所有这些代码包装在 UI: do { } block 中的原因是什么?我在哪里可以获得关于它的明确说明?

UI: do {
backgroundButton.setImage(UIImage.init(named: "search"), for: .normal)
backgroundButton.backgroundColor = Colors.backgroundButtonBackgroundColor
backgroundButton.tintColor = Colors.backgroundButtonTintColor
}

最佳答案

除了用于中断循环(更改控制流)的标签外,在您的特定示例中,它可能用于组织代码。

所以,在:

UI: do {
//...
}
  1. UI: 是一个 Labelled Statement其中 UI 是用户定义的标签名称,应该具有足够的描述性以向读者表明或暗示其用途

    Labeled Statement

    You can prefix a loop statement, an if statement, a switch statement, or a do statement with a statement label, which consists of the name of the label followed immediately by a colon (:). Use statement labels with break and continue statements to be explicit about how you want to change control flow in a loop statement or a switch statement

    Ref: https://docs.swift.org/swift-book/ReferenceManual/Statements.html#ID439

  2. do { } 是一个 Do Statement

    Do Statement

    The do statement is used to introduce a new scope and can optionally contain one or more catch clauses, which contain patterns that match against defined error conditions. Variables and constants declared in the scope of a do statement can be accessed only within that scope.

    Ref: https://docs.swift.org/swift-book/ReferenceManual/Statements.html#ID533

  3. //...do

  4. 范围内的所有代码

使用示例:

在单体函数中,为了提高代码的可读性和隔离内部逻辑,可以使用带标签的do语句。

所以,如果这是一个单体函数:

func update() {
var hasUpdatedDatasource = false

print("setting datasource")
//N lines of code related to datasource
let strings = ["update", "Datasource"]
print(strings.joined())
hasUpdatedDatasource = strings.count > 2

print("setting something")
//N lines of code related to something
if hasUpdatedDatasource {
print("setting some more stuff")
//N lines of code related to something more
}

print("setting UI")
//N lines of code related to UI
}

在这里我们看到多行代码,您可能在其中创建/修改变量。基本上有很多 soup 代码,很难弄清楚哪一组代码行正在处理哪个功能或功能的一部分。

像您的情况一样,使用带标签的 do 语句将使代码更具可读性,如下所示:

func update() {
var hasUpdatedDatasource = false

updateDatasource: do {
//do datasource related modification
//N lines of code go here
let datasource = ["update", "Datasource"]
print(datasource.joined())

hasUpdatedDatasource = strings.count > 2
}

doSomething: do {
print("doSomething")
//N lines of code go here

guard hasUpdatedDatasource else { break doSomething }
print("doSomething: More")
//N lines of code go here
}

updateUI: do {
print("updateUI")
//N lines of code go here
}
}

这允许您将一组代码行组合成带有描述性标签名称的代码块,并更清晰地显示逻辑流程。
您可以从它的 do 作用域之上访问和修改变量,并且由于它有自己的作用域,所以在内部创建的变量只能在这里访问。
这可以防止变量在函数结束之前不必要地逗留。

注意事项:

  • updateDatasource 创建了一个局部变量 datasource,它在它的范围之外不可用,并且...修改了一个变量 hasUpdatedDatasource 这是局部于整个功能
  • doSomething 有一个 break 语句,可以通过引用它的标签名称随时中断自身

它确实使代码更具可读性,但不一定更易于维护,因为它是有状态的。
就个人而言,我更喜欢将大函数拆分为更小或嵌套的函数。但这并不意味着带标签的 do 语句没有用处。
如果它能让您的代码变得更好,那就去做吧。

关于swift - 界面 : do { } in Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55293363/

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