Swift에서 (guard 절에서도) 그룹이 없는 index를 인용할 때 붕괴
댓글 (2017/01/25 추론)
원본, 코드에서array의 범위 밖 인덱스에 접근하는 것을 피하기 전에 이것은 디자인 문제입니다.
보도로서의 타당성이 결여되어 있어 떳떳하지 못하다.
Swift에서 Array의 인덱스가 범위를 초과할 때의 오류는 인코딩 오류로 여겨지기 때문에 처리해야 할 오류 (Logic failure) 가 아니라guardlet이나 iflet으로 처리할 수 없습니다.나는 실행할 때 처리하는 것이 아니라 잘못된 코드를 수정해야 한다고 생각한다.Array의 인덱스가 범위 밖의 상황에서 그 구체적인 용례를 처리하고자 하는 것을 감안하면 그런 상황이 거의 생각나지 않기 때문에 타당한 설계이다.
by@koher씨
다음은 원 보도입니다
"Xcode한테 혼나지 않았으면 좋겠다"
Playgroundvar array: [String]?
array = ["first", "second", "third"]
func getStr(index: Int) -> String? {
guard let str = array?[index] else { // 👈 ここでクラッシュ
return nil
}
return str
}
print(getStr(index: 3)) // 👈 配列外を参照
fatal error: Index out of range
Safe (bounds-checked) array lookup in Swift, through optional bindings?
http://stackoverflow.com/questions/25329186/safe-bounds-checked-array-lookup-in-swift-through-optional-bindings
Swiftextension Collection where Indices.Iterator.Element == Index {
/// Returns the element at the specified index iff it is within bounds, otherwise nil.
subscript (safe index: Index) -> Generator.Element? {
return indices.contains(index) ? self[index] : nil
}
}
👇
Swiftlet array = [1, 2, 3]
for index in -20...20 {
if let item = array[safe: index] {
print(item)
}
}
Reference
이 문제에 관하여(Swift에서 (guard 절에서도) 그룹이 없는 index를 인용할 때 붕괴), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/keisei_1092/items/185a1c3fe2f6a236049e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
"Xcode한테 혼나지 않았으면 좋겠다"
Playground
var array: [String]?
array = ["first", "second", "third"]
func getStr(index: Int) -> String? {
guard let str = array?[index] else { // 👈 ここでクラッシュ
return nil
}
return str
}
print(getStr(index: 3)) // 👈 配列外を参照
fatal error: Index out of range
Safe (bounds-checked) array lookup in Swift, through optional bindings?
http://stackoverflow.com/questions/25329186/safe-bounds-checked-array-lookup-in-swift-through-optional-bindings
Swiftextension Collection where Indices.Iterator.Element == Index {
/// Returns the element at the specified index iff it is within bounds, otherwise nil.
subscript (safe index: Index) -> Generator.Element? {
return indices.contains(index) ? self[index] : nil
}
}
👇
Swiftlet array = [1, 2, 3]
for index in -20...20 {
if let item = array[safe: index] {
print(item)
}
}
Reference
이 문제에 관하여(Swift에서 (guard 절에서도) 그룹이 없는 index를 인용할 때 붕괴), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/keisei_1092/items/185a1c3fe2f6a236049e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
extension Collection where Indices.Iterator.Element == Index {
/// Returns the element at the specified index iff it is within bounds, otherwise nil.
subscript (safe index: Index) -> Generator.Element? {
return indices.contains(index) ? self[index] : nil
}
}
let array = [1, 2, 3]
for index in -20...20 {
if let item = array[safe: index] {
print(item)
}
}
Reference
이 문제에 관하여(Swift에서 (guard 절에서도) 그룹이 없는 index를 인용할 때 붕괴), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/keisei_1092/items/185a1c3fe2f6a236049e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)