your3i’s blog

iOSエンジニア。頑張る⚉

swift

CodingKeyとKeyDecodingStrategyのconvertFromSnakeCase一緒に使う

概要 iOS9からAPIのリスポンスとアプリモデルの間のマッピング用のCodable(Decodable + Encodable = Codable)が使えるようになった。CodingKeyはdecodeとencodeに必要なキーを定義するとき使うプロトコルである。そして、convertFromSnakeCaseはdecodeすると…

Intrinsic content sizeを使ってtableviewのdynamic heightを対応

Intrinsic content sizeとは Auto Layout 機能の一部 UIViewのintrinsicContentSizeプロパティ constraintが設定されてない場合、intrinsicContentSizeが代わりレイアウトの計算に使われる UILabel, UIButtonみたいに、Viewのいろんな中身を適切に表示するた…

Viewの一つの角を角丸にする

こういうViewを作りたく 高さ30の長方形 左下はサイズ24の角丸 Try CACornerMask (Failed) iOS11から使えるようになったCACornerMaskを使ってみる。 let view = UIView(frame: CGRect(x: 0, y: 0, width: 60, height: 30)) view.backgroundColor = .cyan vie…

Swiftでの日付フォーマットのメモ

アプリでDateの扱いは2パターンある APIの日付文字列をDate型にマッピング Date型をユーザーに見せるStringに変換 この2つのタイミングで、DateFormatterが使われる。DateFormatterにはdateFormat, calendarやlocaleを設定必要があり、どんなタイミングで…

Heroを使ったmodal viewcontrollerをドラッグ閉じるの実装

この間、画像のプレビュー画面を作った。よくある、フルスクリーンのズームイン・ズームアウトできる画面。閉じるときは、一応×ボタンで閉じれる。でも、やっぱりTwitterみたいに、下スワイプして閉じれる方がかっこいいだね。 Heroとは HeroはTransitionを…

noneを含めたOptionalのenumを比較するとき要注意

例: enum Foo: String { case hoge case none } var a: Foo = .none print(a == .none) // true var b: Foo? = Foo.none print(b == .none) // false こうなる理由は: 後者の`.none`がOptionalタイプの.noneになっている。 要するにnilだ。 print(nil == .…