gpt4 book ai didi

swift - 数组搜索功能在 Swift 中不起作用

转载 作者:行者123 更新时间:2023-11-28 09:33:55 25 4
gpt4 key购买 nike

我承认我有点傻,但经过几个小时的尝试我不得不问:

class AGE {

static func getAge() -> Int {

var age: Int

for items in dataArray {
if items.name == "Steven" {
age = items.age
}

else {
age = 0
}
}

// variable "age" used before being initialized - WHY?
return age
}
}

我什至尝试在开始时设置 var age: Int = 0,但随后函数 return 0。我希望此时有人能原谅我这个基本问题。任何帮助表示赞赏。

为了更清楚地说明 dataArray 的样子:

struct Person {
let name: String
let lastName: String
let age: Int
}

let person1: Person = Person(name: "Steven", lastName: "miller", age: 23)
let person2: Person = Person(name: "jana", lastName: "drexler", age: 31)
let person3: Person = Person(name: "hanna", lastName: "montana", age: 56)

var dataArray = [Person]()

dataArray.append(person1)
dataArray.append(person2)
dataArray.append(person3)

更新

试图汇集所有答案的本质,解决方案必须如下所示: 年龄段 {

    static func getAge() ->Int {

var age: Int = 0

for items in dataArray {
while items.firstName == "Steven" {
age = items.age

return age

break // This break will never be executed because of return.
}
break // setting the break here, the loop will break after first round
}
return age
}
}

此代码有效(有第二次中断)但仅适用于第一个循环。剩下的问题是,如何在循环达到目标后设置 return 和 break。 return 或 break 都会阻止另一步。

最佳答案

导致 age 在其返回之前初始化的可能程序流路径并不详尽。如果 dataArray 为空,则永远不会进入 for ... in 循环体,并且永远不会初始化 age。在您的特定示例中解决此问题的最简单方法是在声明时将 age 初始化为 0

关于“意外的”0 返回,即使 dataArray 包含一个元素的 name 属性值为 "Steven":对于 for ... in 循环中的每个传递, 包含具有 name 属性值 的元素“Steven”,您将age 的值重置为 0。这意味着只有当 "Steven" 值元素是 dataArray 的最后一个时,非 0 age 值(value)坚持。我真的没有看到任何理由在初始化之后再次将 age 设置为 0 ,所以你可以通过例如解决这个问题在匹配的情况下从 for 循环执行提前退出 (break)。或者,根据您想要实现的目标,只需在第一次匹配时从方法中return items.last_updated(请注意,早期的return 语句可能影响性能)。

关于swift - 数组搜索功能在 Swift 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44604743/

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