Swift
本日は初学者向けに、targetとなるViewのサイズに応じて、サイズを計算するAutoLayoutのメソッドを紹介します♂️ 結論 constraint(equalTo:, multiplier:) で下記のように設定することができます。multiplierにはequalToでしていしたサイズに対する割合を設…
UICollectionViewDiffableDataSourceをつかっていた際にタイトルのエラーが発生したので、対処法をかるくメモ 今回エラーが発生したのは、セクションの情報を追加するときの処理です。 var snapshot = dataSource.snapshot() snapshot.appendSections(newSec…
再描画時にcollectionViewLayoutを入れ替えて、dataSource.apply(snapshot, animatingDifferences: false)なんてことをしていたが、なんかデータのリフレッシュタイミングでIndex out of rangeになると思ったら更新の仕方が大きく勘違いしていたので軽くメモ…
ArrayからDictionary変換したい時って、どうやったらシンプルにできるんだっけ?っていうのを忘れていたのでメモ♀️ 結論 reduce使えばええやん ちなみにクロージャの引数になるdictは定数なので、新しい変数を作ってデータを追加していく必要があります。 l…
結論 右下を角丸にする場合は、下記のように指定することで一部を角丸にできます。コードを見ればわかるように、maskedCornersは配列で指定することができるので、角丸にする部分を組み合わせることもできます。 view.layer.cornerRadius = 10 view.layer.ma…
本日はXcodeの小ネタです imageやcolorをソースコード上に表示する Xcode8によって追加された機能により、ソースコード上にimageやcolorを表示しながらセットすることができます。 この機能はImage LiteralやColor Literalを選択することで、下記のように使…
久しぶりにUICollectionViewCellの実装をコードベースで行ったら、初心者みたいなやらかしをしたのでメモ♀️ やらかし やらかしの一部がこちら。そうです、動的にCellの高さが変わるような場合に、Cellが再利用されるタイミングでImageViewのframeが以前のco…
本日はSwift初学者向けの Unable to infer complex closure return type; add explicit type to disambiguate の対処法を簡単に紹介します 結論 これはクロージャの戻り値の方をSwiftコンパイラが上手く型推論できないときに発生します。 let itemLayouts = …
本日もSwiftの小ネタになります♀️ enumにnoneを使う 特定のタイプに属さないタイプを表すとき下記のようにnoneという命名で、enumを定義することがあるかもしれませんが、このネームスペースはSwift.Optionalで定義してあるnoneと衝突する可能性があるので…
Observableを再帰的に実行するサンプル実装をしたので、軽くメモしておきます もっといい書き方あったらコメントで教えてください! どんな状況? やりたいこととしては、データIDの配列からページネーションしながらIDを取り出し、そのIDを元にデータを取得…
ArraySliceのArray変換を知らんかったのでメモ👷♀️ 結論 Array(arraySlice)で普通にいけるらしい。 let arraySlice = items[0..<3] let array = Array(arraySlice) てな感じで短いですが、本日も以上となります🍺 その他の記事 yamatooo.blog yamatooo.blog yam…
# 結論 subscriptを使ってArrayに下記のようなextensionをはやしておくと便利です。戻り値がArraySlice<Element>?になることで、範囲外を取り出そうとした場合でもnil回避ができます。 extension Array { subscript(safe range: Range<Index>) -> ArraySlice<Element>? { if range.end</element></index></element>…
本日はSwiftの初学者向けに、配列の特定の範囲を取得する方法を紹介したいと思います🏃♂️ やっていく rangeによる取得 let hoge = array[0..<2] // 配列の一番目と二番目の要素を取得 prefix / suffix による取得 let hoge1 = array.prefix(2) // 先頭から二…
本日もSwiftに関する小ネタです♂️ 関数でパラメータの設定を任意にする場合、下記のようにデフォルト値を設定することはよくあると思いますが、SwiftのProtocolはデフォルト値をパラメータに設定することはできません。 class Fish { func printFishName(na…
UIEdgeInsetsをHashableに準拠させる実装を手動で行なった時のメモ。 手動でhashvalueを取得 手動でhashvalueを取得したい場合、SwiftではHasher構造体を使用できます。combine()メソッドでデータをキャプチャし、finalize()メソッドでhashvalueを生成します…
本日もSwift初学者向けの小ネタになります♂️ @testable import は何をやっている? @testable importはインポートしたモジュールのinternalアクセスレベル以下の関数にアクセスできるようにする機能です。通常は、別モジュールからinternalレベルの関数など…
本日もSwiftに関する小ネタです♂️ 結論 @discardableResultアノテーションを関数につけることで、コンパイラの警告を無視することができます。 before: func hoge() -> String { print("hoge") return "" } hoge() // Result of call to 'hoge()' is unused…
本日もSwiftの小ネタになります♂️ 結論 NSObjectに下記のようなextensionを生やしておくと便利です。 extension NSObject { static var className: String { return NSStringFromClass(self).components(separatedBy: ".").last! } } てな感じで本日は以上…
Arrayから配列を取り出そうとする時に、配列外のインデックスを指定してしまうと、Index out of rangeエラーが発生してしまいます。 今回は、そんな状況を回避するための初心者向けの小ネタです♂️ 結論 下記のようにextensionを生やしておくことで、配列か…
本日も初心者向けのSwiftの超小ネタです♂️ 数値を0埋めする Stringのformatで下記のように0埋めすることができます。ちなみに0埋めする桁数は%03dのdの前の数値をいじることで、変更できます。 let number = 3 let numberString = String(format: "%03d", n…
UICollectionViewDiffableDataSourceを使ってみたところ、アイテムを表示する際の挙動が予想と違ったので軽くメモ 何が違ったのか? 複数のセクションで、値が同じアイテムを使うと、一方のセクションではそのアイテムが表示されなくなる。 例えば、セクショ…
iOSのCompositionalLayoutを使うにあたり、サイズを指定するためのNSCollectionLayoutDimensionの種類を調べたので軽くまとめておきます♀️ NSCollectionLayoutDimensionの種類 NSCollectionLayoutDimensionの種類は下記になります。 // dimension is comput…
今回は下記のようなsemantic versioningのバージョンを 2.34.0 下記のような数値で取り出した際のメモです。(用は文字列操作) 2340 結論 StringProtocolのreplacingOccurrencesメソッドを使うことで、特定の文字列をリプレースできます。 let versionString …
結論 そのまま、取得したViewのsystemLayoutSizeFittingで、StackViewのAutoLayoutが反映されると思ったら、そんなことはなかった。 let v = CustomeView.instantiate() v.frame = .init(x: 0, y: 0, width: UIScreen.main.bounds.width, height: v.systemLa…
結論 iOS11からScrollViewの領域がsafeArea分の余白がデフォルトで追加されます。(完全に忘れてた) 結論から言うと、この余白を追加しないようにするためにはcontentInsetAdjustmentBehaviorで.neverを選択します。 scrollView.contentInsetAdjustmentBeha…
久しぶりに、UIPageViewControllerを使ってたらうっかりミスに悩まされたので、後世に記事を残しておきます♀️ 結論 おそらく、あなたがそのエラーになっているのは、setViewControllersで複数のViewControllerを設定しているからでしょう。` setViewControl…
結論 下記のようにして、AutoLayoutの制約などに基づいたViewのサイズを取得することができます。 ちなみにUIView.layoutFittingCompressedSizeは、UIViewのクラスプロパティで、可能な限りサイズを小さいサイズを返します。ここでは、制約内で最も小さくな…
イベントをenumに変える便利なオペレータがあったことを最近知ったので、メモしておきます👷♀️ reactivex.io .materialize() .materialize()は、ストリームに流れる各イベントを、それぞれEventというenumに変換します。 @frozen public enum Event<Element> { /// Nex</element>…
Firestoreを使って、アプリ側の強制アップデート機能を実装したので、今回はその方法を簡単に紹介していきたいと思います♀️ それではやっていく まず重要なのは、現在のバージョンが必須バージョンを満たしているかどうかの条件分岐です。これは以前のブロ…
今回もSwiftの超短い小ネタです♀️ 結論 iOS11以降からは、下記のようにUIViewのsafeAreaInsetsからSafeAreaの幅等を取得することができます。 UIApplication.shared.windows.filter { $0.isKeyWindow }.first?.safeAreaInsets.top ?? 0 てな感じで本日は以…