2015-10-01 18 views
12

cách chính xác để sử dụng bảo vệ bên trong vòng lặp for là gì?Swift 2: bảo vệ trong vòng lặp?

for (index,user) in myUsersArray.enumerate() { 

    guard user.id != nil else { 
     print("no userId") 
     //neither break/return will keep running the for loop 
    } 

    if user.id == myUser.id { 

     //do stuff 

    } 
} 
+0

Phần in có cần thiết không? Điều này có thể là một sử dụng cho 'for in where'. –

+0

nope, chỉ cho "thông tin" trong khi phát triển rằng có thể có một số cũ dev-user-accs vẫn còn xung quanh – longbow

+0

Cú pháp là 'guard let ...' và từ bạn đang tìm kiếm bên trong khối khác là 'tiếp tục'. Nhưng có, một cho ở nơi sẽ tốt hơn. – Fogmeister

Trả lời

17

Có một vài cách để thực hiện một số điều kiện:

Bạn có thể đặt một điều kiện để toàn bộ cho. Nó sẽ được gọi cho mỗi lần lặp

for (index, user) in myUsersArray.enumerate() where check() {} 
for (index, user) in myUsersArray.enumerate() where flag == true {} 

Bạn có thể kiểm tra một cái gì đó bên cho và bỏ qua một lần lặp hoặc ngừng vòng lặp:

for (index, user) in myUsersArray.enumerate() { 
    guard check() else { continue } 
    guard flag else { break } 
} 

Trong trường hợp của bạn tôi sẽ viết một cái gì đó như thế này:

for (index, user) in myUsersArray.enumerate() { 
    guard let userId = user.id, userId == myUser.id else { continue } 

    // do stuff with userId 
} 
+0

Điểm của 'where true == true' là gì? –

+0

Có vẻ tốt nhưng bạn có thể thêm một số từ mô tả những gì bạn định vượt qua. –

+0

@appzYourLife chỉ là một vài ví dụ mà bạn có thể đặt điều kiện – Arsen

2
for (index,user) in myUsersArray.enumerate() { 

    guard let userId = user.id else { 
     print("no userId") 
     continue; 
    } 

    if userId == myUser.id { 

     //do stuff 

    } 
} 
3

@Một câu trả lời chính xác nhưng tôi nghĩ điều này dễ hiểu hơn

let ints = [1,2,3,4,5] 

for (index,value) in ints.enumerate() { 

     guard value != 1 else { 
      print("Guarded \(value)") 
      continue 
     } 

     print("Processed \(value)") 
} 
Các vấn đề liên quan