var item = [String]?()
item?.append("aaa")
print(item)
// -> nil
- optionalで宣言しているだけなのでnilのチェーンになり、当然 item はnilのまま。
var item = [String]?()
item = []
item?.append("bbb")
print(item)
// -> ["bbb"]
- append()を有効にするには一旦、空の配列でもいいので入れてやらないといけない
itemがnilではなくなった時点でappend()が有効になり、配列の中身がかわる
どちらも正しいコードなのでXcodeもコンパイラもエラーを返さない
optionalをforced unwrappingでもしてないかぎり1つ目の例でも、実行時クラッシュしない
オブジェクトに破壊的変更をもたらすメソッドは全部こういうこのが起こりうるので注意しないと、と僕は思った