iOSエンジニアのつぶやき

毎朝8:30に iOS 関連の技術について1つぶやいています。まれに釣りについてつぶやく可能性があります。

【RxSwift】Error発生時の再度実行

Observableでエラーが発生した時の再度実行に関するメモです retry, retryWhen Observableでエラーが発生した場合、再度subscribeするには主にretry・retryWhenオペレーターが使えます。 retryオペレータはシンプルで、エラーが発生した場合に無条件でObserv…

RxSwiftのMaybeって何だっけ?

Maybeとは? success・error・completedのいずれかのイベントで、最初のイベントのみをキャプチャするObservableです。つまり、何らかのイベントが流れた時点で、Obsrevableはdisposeされます。 Singleと混合しがちですが、Singleではcompletedイベントを送…

【Xcode】Xcodeのドロップダウンメニューは基本フィルターできるんですね

本日はXcodeの小ネタです Xcodeのドロップダウンメニューはフィルターできる Xcodeでよく見る下記のようなドロップダウンメニュー。実は文字を入力するとフィルターできるらしい(知らんかった)。 こんな感じで、結構便利。 てな感じで本日は以上となります…

【Swift】ArraySlice to Array

ArraySliceのArray変換を知らんかったのでメモ👷‍♀️ 結論 Array(arraySlice)で普通にいけるらしい。 let arraySlice = items[0..<3] let array = Array(arraySlice) てな感じで短いですが、本日も以上となります🍺 その他の記事 yamatooo.blog yamatooo.blog yam…

【Swift】Arrayから特定の範囲を取り出す際に index out of range を回避する

# 結論 subscriptを使ってArrayに下記のようなextensionをはやしておくと便利です。戻り値がArraySlice<Element>?になることで、範囲外を取り出そうとした場合でもnil回避ができます。 extension Array { subscript(safe range: Range<Index>) -> ArraySlice<Element>? { if range.end</element></index></element>…

【Swift】配列から特定の範囲を取り出す技

本日はSwiftの初学者向けに、配列の特定の範囲を取得する方法を紹介したいと思います🏃‍♂️ やっていく rangeによる取得 let hoge = array[0..<2] // 配列の一番目と二番目の要素を取得 prefix / suffix による取得 let hoge1 = array.prefix(2) // 先頭から二…

【Swift】Protocolでdefault valueのあるパラメータを設定したい

本日もSwiftに関する小ネタです‍♂️ 関数でパラメータの設定を任意にする場合、下記のようにデフォルト値を設定することはよくあると思いますが、SwiftのProtocolはデフォルト値をパラメータに設定することはできません。 class Fish { func printFishName(na…

【Swift】手動でHashableに準拠させる

UIEdgeInsetsをHashableに準拠させる実装を手動で行なった時のメモ。 手動でhashvalueを取得 手動でhashvalueを取得したい場合、SwiftではHasher構造体を使用できます。combine()メソッドでデータをキャプチャし、finalize()メソッドでhashvalueを生成します…

【Swift】@testableには何の意味がある?

本日もSwift初学者向けの小ネタになります‍♂️ @testable import は何をやっている? @testable importはインポートしたモジュールのinternalアクセスレベル以下の関数にアクセスできるようにする機能です。通常は、別モジュールからinternalレベルの関数など…

【Swift】戻り値を使わない場合にコンパイラの警告を無視する

本日もSwiftに関する小ネタです‍♂️ 結論 @discardableResultアノテーションを関数につけることで、コンパイラの警告を無視することができます。 before: func hoge() -> String { print("hoge") return "" } hoge() // Result of call to 'hoge()' is unused…

【Swift】クラス名を取得

本日もSwiftの小ネタになります‍♂️ 結論 NSObjectに下記のようなextensionを生やしておくと便利です。 extension NSObject { static var className: String { return NSStringFromClass(self).components(separatedBy: ".").last! } } てな感じで本日は以上…

【Swift】Arrayで値を安全に取り出そう

Arrayから配列を取り出そうとする時に、配列外のインデックスを指定してしまうと、Index out of rangeエラーが発生してしまいます。 今回は、そんな状況を回避するための初心者向けの小ネタです‍♂️ 結論 下記のようにextensionを生やしておくことで、配列か…

【30C】 Firebase Local Emulator Suiteの序章

本日は、今まで全く触れたことのないFirebase Local Emulator Suiteについて、さらっと調べた概要をメモしておきます Firebase Local Emulator Suiteとは? Firebase Local Emulator Suiteは、Firebaseで提供されている各機能をローカルでビルド及びテストす…

【Swift】数値の0埋め

本日も初心者向けのSwiftの超小ネタです‍♂️ 数値を0埋めする Stringのformatで下記のように0埋めすることができます。ちなみに0埋めする桁数は%03dのdの前の数値をいじることで、変更できます。 let number = 3 let numberString = String(format: "%03d", n…

【30C】Firebase Predictionsとは?

本日は久しぶりに30分チャレンジをしてみたいと思います‍♂️ 今回のお題はFirebaseの「Firebase Predictions」についてです。それではやっていきましょっ Firebase Predictionsとは? Firebaseが提供する、ユーザセグメントを作成するための機能で、アプリな…

【CSS】コンテンツを中央寄せで表示する

CSS

結論 下記のようにmarginに0 autoをしてすることで、コンテンツの余白を均等に割り当てて表示することができます🔰 .container { margin: 0 auto; } てな感じで本日は以上となります 🍺 その他の記事 yamatooo.blog yamatooo.blog yamatooo.blog

AppStoreのリンクが長いと思ったあなたへ

アプリのAppStoreへのページをリンクを記事中に載せる時、長いと困りますよね? アプリ名に日本語が含まれている場合、下記のような長いリンクになってしまいます。 https://apps.apple.com/jp/app/fidee-%E9%87%A3%E3%82%8A%E3%81%AE%E4%BA%88%E7%B4%84%E3%…

【Xcode】ファイル内の特定の文字列を置き換えよう

皆さんこんにちは。最近ネタがなくて困っているYamatoです ということで、本日はXcodeを使いたての人に使って欲しい、ファイル内の文字列をリプレースする方法を紹介します。 やっていく 1.まずは、⌘Fでファインダーを開きます。 2.左上のメニューから、repl…

【Swift】UICollectionViewDiffableDataSourceでの同一値

UICollectionViewDiffableDataSourceを使ってみたところ、アイテムを表示する際の挙動が予想と違ったので軽くメモ 何が違ったのか? 複数のセクションで、値が同じアイテムを使うと、一方のセクションではそのアイテムが表示されなくなる。 例えば、セクショ…

NSCollectionLayoutDimensionの種類

iOSのCompositionalLayoutを使うにあたり、サイズを指定するためのNSCollectionLayoutDimensionの種類を調べたので軽くまとめておきます‍♀️ NSCollectionLayoutDimensionの種類 NSCollectionLayoutDimensionの種類は下記になります。 // dimension is comput…

【FirebaseAnalytics】UserPropertyに数値ってどうやって設定するの?

A/B Testingでユーザを絞り込む際、UserPropertyを使ってユーザを絞り込もうとしていましたが、その際の条件設定に数値を扱うための演算子があり、この数値の値はどこから設定することができるのか分からなかったのでメモ‍♂️ 結論 クライアント側からはStrin…

有意水準とはなんなんだ?

統計学なんもわからん状態でA/Bテストをするにあたり、有意水準という言葉の意味がよく分からんかったのでメモ 結論 (僕なりの言葉でまとめてみるとこんな感じ。) 有意水準とは、特定の場合でAとBの結果に差があるかどうかを決定するためのしきい値です。 …

【Swift】特定の文字列の置き換え

今回は下記のようなsemantic versioningのバージョンを 2.34.0 下記のような数値で取り出した際のメモです。(用は文字列操作) 2340 結論 StringProtocolのreplacingOccurrencesメソッドを使うことで、特定の文字列をリプレースできます。 let versionString …

【Firebase Analytics】user_pseudo_idは便利

Google Analyticsに便利なカラムがあったのでメモ user_pseudo_idとは? Google AnalyticsのイベントをBigQueryから、クエリを発行する場合ユーザ毎にデータを出力したい場合ありますよね そんな時は基本的に、プロジェクト毎にアナリティクスのユーザーIDを…

【CSS】flexで横並びにしたアイテムを逆順に並べる

CSS

結論 横並びの要素を逆順で並び替えたい時は下記のように display: flex; flex-direction: row-reverse; 縦並びの要素を逆順で並び替えたい時は下記のようにします. display: flex; flex-direction: column-reverse; てな感じで本日は以上となります 参考 de…

Firebase A/B Testingのアクティベーションイベントをちょっと勘違いしていた

Firebase A/B Testingを使うにあたり、アクティベーションイベントの役割を少し勘違いしていたので、メモ‍♀️ 何を勘違いしていた? アクティベーションイベントは、ユーザを A/B テストの対象にするためのトリガーイベントだと思っていましたが、試しにテス…

【CSS】<button>要素の枠線と背景色を消す

CSS初心者なのでメモ 結論 枠線はborderプロパティ、背景はbackgroundプロパティからそれぞれ消せます。 .button { border: none; background: transparent; } ちなみに、クリック時の枠線も消す場合は下記のようにoutlineもnone にしておきます。 .button {…

Firebase A/B Testing をちょっと調べた

最近 Firebase A/B Testingを触る機会があったので、調べたことをちょっとメモしておきます‍♂️ Firebase A/B Testingとは? Firebase が提供する A/B テストの手法で、AまたはBのタイプでどちらの方がCVRがいいのかを分析し、プロダクトを最適化することがで…

【SQL】unnestってなんだ

先日同様に、Firebase A/B Testing の結果をBigQueryで出力したところ、見慣れないunnestという演算子があったのでメモ 結論 unnest演算子は、ARRAYやREPEATEDなカラムをフラット化し、一行にしたテーブルを返します。 公式のサンプルを拝借すると下記のよう…

【BigQuery】_TABLE_SUFFIXキーワードとは?

Firebase A/B Testing の結果をBig Queryで出力したところ、クエリに見慣れない_TABLE_SUFFIXキーワードがあったのでメモ 結論 ワイルドカードテーブルを使用した場合に、_TABLE_SUFFIXでテーブル名のsuffix(接尾)を取得することができます。これは、特定の…