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

标签 swift function search

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

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/

相关文章:

swift - UICollectionView 接收到具有不存在的索引路径的单元格的布局属性 : <NSIndexPath: 0x79fe0f20> {length = 2, 路径 = 0 - 4}

ios - 添加 NavigationLink 时的 Swiftui 问题

c++ - 对这种语法感到困惑

function - 百合功能;为音符添加节奏

ios - 在另一个 View Controller 上访问和修改 UIImage 项

ios - UIStackView 隐藏动画无法正常工作

在 C 中调用相同顺序的函数,每次调用一个不同的函数。如何更优雅地实现?

mysql - 如何对具有字节 KB MB GB 数据的 mysql 列进行排序?

ios - 从文本文件ios搜索单词或单词组合

javascript - 如何使用 javascript 在 <td> 中搜索字符串然后添加到该 id 中?