2016-09-05 10 views
0

プロパティを変更して別の配列から新しい配列を作成しようとしています。私はこのスレッドで答えを追っ:私は追加するとマップを使用して構造体プロパティを新しい配列に変更する

struct Day { 
    var day: String 
} 

var mondays: [Day] = [] 

for i in 0..<10 { 
    let day = Day(day: "Monday") 

    mondays.append(day) 
} 

print(mondays) 

// create a new array where all days have the day property set to 'Tuesday' 
let tuesdays = mondays.map { (var d) -> Day in 
    d.day = "Tuesday" 
    return d 
} 

print(tuesdays) 

:ここ

(XCodeのを8beta6)Using Map in Swift to Change Custom Struct Properties、私はそれが動作するようになっていない午前、と私の遊び場でのクラッシュを得る簡単な例でありますコードの2番目の部分は長いクラッシュログでクラッシュします(これは大きすぎるのでここでは再現しません)。だから、Swift 3やXcode betaのバグかもしれません。

私のコードに間違いがありますか?マップを正しく使用していますか?

答えて

4

SE-0003に従って、var Swift 3から機能パラメータが削除されました(トピックではthis Q&Aも参照)。このことを伝えるエラーメッセージを生成する代わりに、コンパイラがクラッシュするという事実はバグです。コンパイラは決してクラッシュするべきではありません。

解決策は単に​​の関数パラメータの独自の変更可能なコピーを作成するだけです。

let tuesdays = mondays.map { (d) -> Day in 
    var d = d // mutable copy of d that shadows the immutable function argument d 
    d.day = "Tuesday" 
    return d 
} 
+0

ない既に場合は、 – Hamish

+0

バグレポートが提出されたhttps://bugs.swift.org/でコンパイラのクラッシュを超えるため、バグレポートを提出する必要があります! – Koen

+1

興味がある場合:https://bugs.swift.org/browse/SR-2562 – Koen

関連する問題