2017-04-25 20 views
-2
func allStrings(inputArray: [String]) -> [String] { 
    var a = inputArray 
    var b : [String] = [] 
    var c = a.count 


    for i in stride(from: 1, to: c, by: 1) { 
     if a[i].lengthOfBytes(using: String.Encoding.utf8) ==  b[0].lengthOfBytes(using: String.Encoding.utf8) { 
      b.append(a[i]) 
     } 
     if a[i].lengthOfBytes(using: String.Encoding.utf8) > b[0].lengthOfBytes(using: String.Encoding.utf8) { 
      var b = [String]() 
      b.append(a[i]) 
     } 

    } 

    return b 
} 

私のコードに何が問題なのか分かりませんが、実行するとコンソールにこのエラーがあります。誰が何が間違っているのか分かりますか?インデックスの範囲外の致命的エラー

fatal error: Index out of range

+2

配列インデックスは、Swiftで**ゼロ**で始まります。 –

+1

また、 'b'配列は最初は空です**あなたは' b [0] 'にアクセスしてはいけません - それは何を期待していますか? –

+0

コードをデバッグしようとしましたか?そして、あなたは何を達成しようとしていますか? 2番目のifブロックでは、* local *変数 'b'に追加しますが、これは役に立たないものです。 –

答えて

1

エラーは、あなたがあなたの配列bが空であり、あなたはそれがループ内であなたの最初のif条件で0番目のインデックスのアクセスしようとしている0要素

// the array b is empty, so b[0] gives you the error 
if a[i].lengthOfBytes(using: String.Encoding.utf8) ==  b[0].lengthOfBytes(using: String.Encoding.utf8) { 
      b.append(a[i]) 
     } 
     if a[i].lengthOfBytes(using: String.Encoding.utf8) > b[0].lengthOfBytes(using: String.Encoding.utf8) { 
      var b = [String]() 
      b.append(a[i]) 
     } 
0

を持っているBにアクセスしようとしているありますこれは本当に存在しません。

関連する問題