Swift

ViewControllerが解放されない。クロージャーで強参照していた件。

使い終わったViewControllerでdeinitが呼ばれていないことに気づいた。 メンテナンス性を上げようとしてカプセル化を行ったは良いが、クロージャーで強参照をしてしまっていた。 delegateや、rootViewcontrollerのようなパラメータにweakの指定はもちろんの…

Objective-C を自動でSwiftに変換する - プログラミング

objectivec2swift.com まるでGoogle翻訳のように、Objective-CのコードをSwiftに変換してくれる。無料だと数十行ずつしか変換してくれないので、小分けにして変換する必要はあるが、とんでもなくありがたいサービスだ。 90パーセントくらいの精度は、出てい…

Swift4 アプリ内課金ライブラリSwiftyStoreKitが便利

iOSのアプリ内課金処理は複雑でわかりづらい。 良いライブラリがないか探していたところ、SwiftyStoreKitが大変便利だったので忘備録として残しておく。 ここでの処理は非消耗型の課金アイテムとする。 github.com SwiftyStoreKitを使えるように準備 podでイ…

Swiftで一度だけ実行したい時に使えるファンクション

viewDidLayoutSubviewsなど何度も呼び出されてしまうファンクション内で一度だけ実行したい処理があった場合に以下のような書き方をしていた。 これだと毎回フラグを宣言、条件分岐するのは面倒だし、可読性がよくないなと思っていた。 var isFirst = false …

SwiftのUILongPressGestureRecognizerは二回呼ばれる

let longPressRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(ViewController.longPressedButton)) button.addGestureRecognizer(longPressRecognizer) こんな感じで登録したlongPressedButton関数は二回呼ばれる。 アラートな…

Swift4でUITalbeViewの最下部にスクロールしたい

最下部にスクロールするにはscrollToRowを使うが、tableView.reloadData() 後すぐに実行すると正しくスクロールできない。 タイマーでタイミングを少しずらすことでうまくいった。 //tableViewに追加する処理をした後 tableView.reloadData() DispatchQueue.…

Swiftでメソッドチェーン実装、返り値を使わない時のwarningを消したい

メソッドチェーンを実装しようとした時に、返り値を使わない場合が多々ある。 Xcodeは関数の返り値を使わないと丁寧にwarningを出してくれるが、warningだらけになってしまうので対処したかった。 結論としては、@discardableResult アノテーションを付けれ…