Swiftで遊ぼう! - 997 - 以前の乱数のページを改訂しました。
- Swiftで遊ぼう!の前書き-> Life-LOG OtherSide
今日は下記のページの乱数に関する記述をSwift 4.2向けに改訂しました。
Swiftで遊ぼう! - 720 - もう少しランダム数を考える - Swiftで遊ぼう! on Hatena
ちょっとずつ既存の話題を最新のSwift 4.2に切り替えていきます。
Swiftで遊ぼう! - 997 - Swift 4.2で乱数の扱いが変わりました!
- Swiftで遊ぼう!の前書き-> Life-LOG OtherSide
WWDC2018の「What's New in Swift」をみていて乱数の扱いが変わったことを知りました。
乱数の発生ひとつとっても、初心者だった私はC言語APIから利用されていた「arc4random()」に違和感を感じていたし、AppleもこのC言語APIの利用はプラットフォームにより挙動が異なる欠点があったということで見直したようです。
let randomInt = Int.random(in: 1...100) print(randomInt) let randomFloat = Float.random(in: 0...100) print(randomFloat) let greetings = ["hi", "hello", "yah", "hoo"] let randomChosenGreetg = greetings.randomElement() print(randomChosenGreetg!) let shuffledGreeetings = greetings.shuffled()
ここまでは問題なく理解できますが、Randm Number Generator(RNG)プロトコールの使い方がわからなです。プレセンテーションではstruct型を使って説明しているのですが意味が分かりません。ヘルプドキュメントの次のenum型使ったコードの方が分かりますね。
enum Weekday: CaseIterable { case sunday, monday, tuesday, wednesday, thursday, friday, saturday static func random<G: RandomNumberGenerator>(using generator: inout G) -> Weekday { return Weekday.allCases.randomElement(using: &generator)! } static func random() -> Weekday { return Weekday.random(using: &Random.default) } } let randomDay = Weekday.random() print(randomDay)
struct型の項目をランダムに取り出すことができそうですが、まだ自分で利用することができませんね。RNGプロトコールを準拠するために.random()メソッドの実装はいらないのにね。
まあ難しいことは今のところ考えずに昔のプロジェクトを修正していこう
Swiftで遊ぼう! - 996 - WWDC2018が始まって思うこと
- Swiftで遊ぼう!の前書き-> Life-LOG OtherSide
何度もプログラミング勉強を再開させるといいながら、再開できずダラダラしている「50オヤジ」です。
Swift言語のメジャーアップデイトに全くついていけてなくて、Swift 4の概要もまだ分かっていないのに、とうとうWWDC2018が始まってしまいました。
昨年はほとんどプログラミング勉強から離れてしまっていたのでWWDC2017のビデオも全く見てませんでし。今年はKeynoteを全部見ました。なんと、新しいハードウェアの発表がなかったのに加えて、OSも開発ツールもブラシュアップが中心ではないですか〜!
これは神のお告げですね。Swift言語のメジャーアップデイト(Swift 5)の前に、ちゃんとSwift 4を勉強して知識を整理しておきなさい、とティム・クックさんがKeynoteで語りかけているようでした(^_^;)
ということで、Keynoteを聞き終わるやいなや MacOSX 10.14 Betaと Xcode10.0 betaをインストールしました。
WWDC2018のセッションを見ながらSwift 4.2で変化したところを勉強していきます。
Swiftで遊ぼう! - 995 - Developing iOS11 Apps with Swiftの復習から
とうとう「Swiftで遊ぼう!」シリーズは3年目に突入。今年中に自作アプリをなんとかしたい!
昨年の夏にバージョン4に進化したSwift言語の復習を手っ取り早くするのにいい資料はないかなって思っていたらスタンフォード大学のポール先生の講義がアップデイトされていたんで最初っから見なおしです。
「Introduction to iOS 11, Xcode 9 and Swift 4」をみて、今まで知らなかったポイントを2つ紹介します。
一つ目は色の設定をするコードで「Color Literal」を使って視覚的にカラーを設定できます。
「color」とタイプすれば、候補に出てきます。
これを選択すると白いスクエアが出現します。
このスクエアをダブルクリックするとテーブルが出現するので直接選択できるんです。
二つ目はOutletの種類が1つ増えた事です。「Outlet Collection」です。お決まりの「⌃ + ドラッグ」でUIオブジェクトをコードにドラッグした時にコレクションオブジェクトを選択できるようになりました。便利になりましたね。
後は特に真新しいことは無かったですね。
Swiftで遊ぼう! - 993 - tagを使ってUIViewオブジェクトを扱ったこと無かったです
しばらくプログラミングの勉強から離れていたので、何度も繰り返し勉強したUITableViewControllerを使ったアプリケーションを作っています。
やってみると色々知らないことに出くわしますね。Cellに設置したUIViewクラス継承のオブジェクトをtagを使って制御するという基本的な方法も知らなかったです。
上記のようにCell上にUILabelを設置します。これをUITableViewControllerファイルで次のように操作します。
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "MyCell", for: indexPath) let label = cell.viewWithTag(1000) as! UILabel label.text = "Run" return cell }
viewWithTag()メソッドを使うのは初めてでした。こういうやり方もあったんですね。
Swiftで遊ぼう! - 992 - Preparing Your App to Run in the Background
Preparing Your App to Run in the Background | Apple Developer Documentation
5つのアプリケーションの状態から5つのトランザクションを経て状態が変化します。Activeなアプリケーションからバックグラウンドに移るときに直接移行できないって以前話しました。
まずdeactivationに入らないといけないので、このときapplicationWillResignActive(_:) が呼ばれて、次の4つのタスクが実行されます。
- ユーザーデータをディスクに保存してオープンしているファイルはすべて閉じられます。
- ユーザーのデータを保持する重要なタスクだけこなします。ディスパッチ・キュー、オペレーション・キューも中断して新しい実行タスクは開始されません。
- アクティブなタイマーは止められます。
- ゲームプレーも中断します。
これはディアクティベーションのステップで、次はバックグラウンドに移るんですが、applicationDidEnterBackground(_:) が呼ばれます。このメソッドはアプリがバックグラウンドで動き始めているとうシグナルです。次にサスペンド状態に入る前に次のいくつかのステップを踏みます。