クロージャー、トレーニング編

久々RPGにハマって更新が遅れてしまいました。面白いですね、ペルソナ5。

いま話題のリングフィットアドベンチャーも順調に進んでいます。ニンテンドーSwitchで出た筋トレゲームですね。品切れ続出とか。

肉が減った感じはありませんが、少しシマってきた気がします。

 

さて、曖昧な理解で終わらせていた、クロージャーと同期・非同期処理にそろそろ決着をつけようと思っています。

サンプルコードを書いていたら時間かかってしまったので、二本仕立てで”トレーニング編”と”実践編”にわけて行います。

 

クロージャーとは関数を変数っぽく使えるやつのことです。

初学者は誤解のないよう、ちゃんとググったほうがいいかもしれません😜

 

前置きはこのくらいにして、サンプルコードいきましょう。

f:id:NNkamura_Enginieer:20191110153502p:plain

宣言の方法と省略について

複数行にわたって同じことを書いています。エラーも発生していないので全て正しい書き方です。

"-> Int"を省略するのはまだ分かりますが、"return"まで省略できちゃうのはどうかと私は思ったりするんですけどね。

 

次回の実践編では、どう使うのか、どう役立つのかについて探っていきますのでお楽しみに。

 

 

ちなみにこのサンプルコードを書くまでにアレコレ試したのが以下です。座学が苦手なのでひたすら試しています。

f:id:NNkamura_Enginieer:20191110154047p:plain

がちゃがちゃ

f:id:NNkamura_Enginieer:20191110154118p:plain

がちゃがちゃ

 

Swiftにおける`バッククォート`を知らなかった話

涼しくなってきましたね。今年ももう2ヶ月になってしまいました。

歳を取ると時間がすぎるのが早いなんて言葉がありますが、それを感じてきたような気もします。

 

`

タイトルの通り、「`」こちらバッククォート。@とShiftキー同時押しで入力できます。

Swiftの難しめのサンプルコードにた `default` とかで使われるアレです。

知れば一瞬なんですがコイツの意味を知らなかったので書きましょう。

 

予約語とは

既に役割があるので変数名などで使えない言葉です。

以前も紹介しました"「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典"さんの例えが好きで、「電話番号でいう110とか119のことだよ」だそうです。分かりやす!

https://wa3.i-3-i.info/word190.html

 

バッククォートの使い方とサンプル

f:id:NNkamura_Enginieer:20191101162129p:plain

予約語「default」にて実験。

ただのdefaultではエラーが出ていますが、`default`では警告になっているのが分かります。※この警告は宣言した変数を一度も参照しないと出るやつなのでOKです。

 

ちなみにエラー文言がこちらなんですけども 

f:id:NNkamura_Enginieer:20191101163446p:plain

エラー文言

「〜, use backticks to escape it」英語ではbacktickって言うようです。へぇ。

補完もしっかりありますし、いざ使おうとして困ることはなさそうですね。

 

 

良い教材がありました

予約語の解説っていう記事がQiitaにあったんですけど面白かった。こんなのあったなぁ!ってなるやつがチョコチョコ出てきます。

inoutとかあまり使わないんじゃないですか?fallthroughとか忘れてませんでした?

https://qiita.com/ezura/items/d011c9b13c70055b6e57

僕が学びたての頃は、switch文の中のbreakの意味が分かんなかったりしましたけども、この記事読んでいれば学習がスムーズだったんじゃないかなと思いましたね。

SwiftUIチュートリアル

https://developer.apple.com/tutorials/swiftui/creating-and-combining-views

SwiftUIのチュートリアル、1つ目をやってみました。

ざっくり言って、Storyboardの代わりとしてコードでレイアウト作成を行えるようです。


今までStoryboardのgit管理って、あまり効果的じゃなかったと思うんですよ。見づらかったり、Xcodeのバージョンで勝手に値が変わったりして差分が発生して。

SwiftUIであれば、かなり変更点が分かりやすくなりそうです。あとコピペもしやすくなるでしょうね。

最終的には開発期間の短縮が見込めそうな気がします。


デメリットはチームの学習コスト、SwiftUIの大幅仕様変更、ノウハウの不足といったところですかね。といっても、SwiftUIチュートリアルもまだ1つしかやっていないので、どこまでポテンシャルがあるのか分からないんですけどね。でもGit管理が効果的なのって結構強みだと思うんですよね。将来的には主流になって欲しいなと思っています。

 

先日SwiftUI使っている現場あるのかなとtwitterで呟いてみましたら、導入している方からコメント頂きまして(ありがとうございます!)、まだ破壊変更や初期バージョンバグのリスクがあるので一部画面に限定して使っているとのことでした。


私も次のチュートリアルやらないと。でも雰囲気掴めたので、ひとまずOKとします。


おまけ

UILabelで自動改行する処理を見つけて「こいつはすげえや!今度のブログ記事のネタにしよう!」と思ったんですが、家で試しに作ろうとしましたらUILabelは普通に自動改行できますやん。なにか、自分で作る必要があったんでしょうかね。うーん。


次回予告

次回はクロージャについて書こうと思っています。使える程度には理解できてると思うのですが、曖昧な理解のままズルズル過ごしているので、ここらでズバッとケリをつけたいと考えています。

サンプルコードが多くなるので次回更新は遅くなりそうです。それでは。

2コマでわかるDarkMode対応

先日リリースしましたアプリのダークモード化に挑戦しました。

 

毎度の事ながら、既にたくさんの方々がダークモード化の記事を書いておられまして、もう書くようなことはない気もするのですが。

 

でも書いちゃいます。

続きを読む

Static Cellsお試し

こんばんは、二日連続になりました。毎日続けるつもりではありません。

 

お仕事の中で、既に作られているTableViewCellを1つだけ別の画面でも出したいことがありました。

そういえばStatic Cellsというのがあったな、再利用するわけでもないし使えるんじゃないの!と思って試したのですが、思うようにいかず。

おとなしくStatic Cellsのサンプル作りをすることにしたわけです。

 

 

Static Cellsとは

静的なCell。単純なCellをStoryboardでサクサク作れる。

f:id:NNkamura_Enginieer:20191023225800p:plain

StaticViewCell作業全体画面

f:id:NNkamura_Enginieer:20191023225843p:plain

"Content"を"Static Cells"に変える

f:id:NNkamura_Enginieer:20191023230019p:plain

楽チンレイアウト

 

色々触ってみまして

f:id:NNkamura_Enginieer:20191023230445p:plain

tableCellの中に置いたTextFieldをIBOutlet接続できたり

TableViewDataSourceDelegateのメソッド(numberOfSectionsとか)を書くと反映されちゃうので消さないとダメだったり

CustomTableCellを反映してみたり(storyboardのClassに書けば簡単にできました)

 

普段やれないことができたりして、色々新鮮でした。

総括として、再利用しない&固定文言&固定レイアウトの場合はStaticViewCellで良いでしょう。文字の反映や動的レイアウトもできそうな感じがしますが、その辺りは後日。

 

以下のサイトを参考にさせて頂きました。

 

https://qiita.com/okyawa/items/79c5eb1e5c568fb825d4

→"入力欄をタップしてキーボードが表示された際、入力欄が隠れないよう、自動的にスクロールしてくれる"だそうです、それは良いなあ

https://qiita.com/KikurageChan/items/08844e4eee774da992db

プロパティやカスタムクラスの使い方などの参考になりました。

https://dev.classmethod.jp/smartphone/iphone/uitableviewcontroller-in-containerview-on-uiviewcontroller/

→"UIViewControllerにContainerViewを配置し、そのContainerViewの中身をUITableViewControllerにすればStatic Cellsを扱うことができるようになります。"

この知識は覚えておくとかなり使う幅が広がりそう。今日の案件にも使えそうです。

 

 

 

あとがき

記事に書くと「当たり前やん!」という感じなんですが、実際にやってみると意外と詰まるものですね。

スクリーンショットに書いている以上のことはしていないのですが、一応ソースコードを下記に載せておきます。こんなものアップしたら逆に評価下がるのでは?という考えが頭をよぎりましたが、自分本位で進めたいと思います。

そしてこのトライアンドエラーを評価していただけると信じて。

https://github.com/NNkamura/Practice_StaticViewCell

 

 

追記:StaticViewCellとかStaticTableViewCellとかStaticCellとか書いたんですが、正しくはStatic Cellsのようなので修正しました。

iOS画面遷移処理の復習。

iOSエンジニアをやっておりますNNkamuraです。

 

iOSに関する練習をまとめたり、サンプルコードをアップしてみたり、この記事良かったよと宣伝してみたり、そんなブログにしようと思います。

続きを読む