質問: Swiftの勉強中に`var cellSize: CGFloat!` という記述が出てきました。 swiftではOptional型以外は値としてnilを取れないので、Optionalに変換してるのだと思うのですが 別の場所ではOptional型の宣言には`?`をつけると出ていました。 試しに`CGFloat!`を`CGFloat?`に置き換えてみたのですが、すぐにはエラーがでないようです。 この2つの表現にはどのような違いがあるのでしょうか?
回答: `T?` は `Optional` の省略形なのに対して、`T!` は `ImplicitlyUnwrappedOptional` の省略形です。 `Optional` が `nil` を許容(nil か T型 が入る)するために使われるのに対し、`ImplicitlyUnwrappedOptional` は `Optional` を暗黙的にアンラップ(生の `T` の状態に)する際に使用されます。 詳細については、Qiita に Optional 型のまとめ がありますので、参照ください。