読者です 読者をやめる 読者になる 読者になる

Unsafe Swiftの安全性 (LT) | try! Swift Tokyo 2017 #tryswiftconf Day1-7 聞き起こし

twitter.com

Swiftは、デフォルトで直接メモリアクセスを許可しないことで、未定義の動作から保護します。 Swiftのunsafe系APIは、読みやすく、Unsafeでなくてはならない部分のみを書くのに役立ちます。

Unsafe Swiftの安全性

定義されていない振る舞い

f:id:niwatako:20170302145627j:plain

f:id:niwatako:20170302145630j:plain

クラッシュするので嫌ですね

f:id:niwatako:20170302145643j:plain

メモリへの直接アクセスを許可しないことでSwiftは安全を確保

しかしCや性能などで必要になることもある

f:id:niwatako:20170302145702j:plain

f:id:niwatako:20170302145713j:plain

6以上のポインタタイプが有る。

f:id:niwatako:20170302145734j:plain

チュートリアルで紹介をしています。

ストリーミングデータコンプレッションアルゴリズム、安全な型の独立乱数ジェネレータなど。

それ以外の話を今日はします。DictionaryとSet

一定のタイムルックアップができて良い

f:id:niwatako:20170302145822j:plain

f:id:niwatako:20170302145823j:plain

しかしあんぜんなハッシュがある場合のみ。

f:id:niwatako:20170302145831j:plain

f:id:niwatako:20170302145843j:plain

Swiftは多くのハッシュバリューを多くの方に提供している

f:id:niwatako:20170302145901j:plain

データセットの中で同等の値があったらクラッシュが起きることになる。

f:id:niwatako:20170302145925j:plain

オブジェクトをStringで表現してハッシュにするというテクニックもあるがヒープアロケーションが必要になってしまう。

そこで。。。

f:id:niwatako:20170302145946j:plain

f:id:niwatako:20170302145957j:plain

バイトを今シュームするだけで出来る。

クライアント側

f:id:niwatako:20170302150013j:plain

スタックの上でクリアリングを行いXYをアシュームしてハッシュを出す

f:id:niwatako:20170302150034j:plain

f:id:niwatako:20170302150055j:plain

アンセーフコードを隔離している。

f:id:niwatako:20170302150110j:plain

ビデオチュートリアルシリーズに入っているのでチュートリアルを見てみて下さい

www.raywenderlich.com