如何在循环中中断和 return
How to break and return in a loop
我尝试访问字典数组中的值。 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)
现在我想访问jana的年龄。如果我这样做:
func getAge() ->Int {
var age: Int = 0
for items in dataArray {
while items.name == "jana" {
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
}
循环将在第一轮结束后停止。 (它只对 steven 有效,因为他在 lopp 的第一轮。)数组很长,所以我需要在第一场比赛后停止循环。在return之后设置break,因为return所以不会执行。 break后设置return,也是一样的。有什么建议吗?
对于瓦迪安:
class AGE {
func getAge() -> Int? {
dataArray.append(person1)
dataArray.append(person2)
dataArray.append(person3)
// Cannot call value of non-function type `Person`
return dataArray.first(where: { [=13=].name == "john" }?.age
}
}
这个怎么样?不需要内部循环(无论如何都不会循环)。
func getAge() ->Int {
for item in dataArray {
if item.firstName == "jana" {
return item.age
}
}
return 0
}
附带说明一下,字典可能是一种更好的存储数据的方式,可以提高查找效率。
不需要 while
循环或 break
语句。
如果你想迭代循环寻找特定人的年龄,你只需要:
func getAge() -> Int? {
for items in dataArray {
if items.name == "jana" {
return items.age
}
}
return nil
}
请注意更新后的 return 值是可选的。 nil
return 值表示找不到此人。不要使用 0
作为魔法值。
硬编码名称也不好。将其作为参数传递。并使用更好的变量名:
func getAge(of name: String) -> Int? {
for person in dataArray {
if person.name == name {
return person.age
}
}
return nil
}
if let age = getAge(of: "jana") {
print("age is \(age)")
} else {
print("Name not found")
}
我尝试访问字典数组中的值。 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)
现在我想访问jana的年龄。如果我这样做:
func getAge() ->Int {
var age: Int = 0
for items in dataArray {
while items.name == "jana" {
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
}
循环将在第一轮结束后停止。 (它只对 steven 有效,因为他在 lopp 的第一轮。)数组很长,所以我需要在第一场比赛后停止循环。在return之后设置break,因为return所以不会执行。 break后设置return,也是一样的。有什么建议吗?
对于瓦迪安:
class AGE {
func getAge() -> Int? {
dataArray.append(person1)
dataArray.append(person2)
dataArray.append(person3)
// Cannot call value of non-function type `Person`
return dataArray.first(where: { [=13=].name == "john" }?.age
}
}
这个怎么样?不需要内部循环(无论如何都不会循环)。
func getAge() ->Int {
for item in dataArray {
if item.firstName == "jana" {
return item.age
}
}
return 0
}
附带说明一下,字典可能是一种更好的存储数据的方式,可以提高查找效率。
不需要 while
循环或 break
语句。
如果你想迭代循环寻找特定人的年龄,你只需要:
func getAge() -> Int? {
for items in dataArray {
if items.name == "jana" {
return items.age
}
}
return nil
}
请注意更新后的 return 值是可选的。 nil
return 值表示找不到此人。不要使用 0
作为魔法值。
硬编码名称也不好。将其作为参数传递。并使用更好的变量名:
func getAge(of name: String) -> Int? {
for person in dataArray {
if person.name == name {
return person.age
}
}
return nil
}
if let age = getAge(of: "jana") {
print("age is \(age)")
} else {
print("Name not found")
}