Swiftで遊ぼう! - 1003 - forEach(_:)
- Swiftで遊ぼう!の前書き-> Life-LOG OtherSide
何事も毎日ちょっとずつちょっとずつ。
今日は単なる備忘録(^_^;)
forEach(_:)
連続するデータ(シークエンス)で使えるインスタンス・メソッドです。
func forEach(_ body: (Int) throws -> Void) rethrows
あれ? rethrowsの使い方も分かってないな?
let numberWords = ["one", "two", "three"] for word in numberWords { print(word) } // Prints "one" // Prints "two" // Prints "three" numberWords.forEach { word in print(word) } // 上に書いているコードと同じ結果
これは便利ですね。覚えておこう。
Swiftで遊ぼう! - 1002 - ちょっとKVOを復習
- Swiftで遊ぼう!の前書き-> Life-LOG OtherSide
Core Dataの勉強をしているんですが、Key値を使ってValue値を取り出すことができるDIctionary型をみていて「Key Value Observing(KVO)」デザイン・パターンを思い出しました。
このデザイン・パターンは、iOSシステムに利用されていて、NSNotificationクラスが典型的なKVOデザイン・パターンだと思います。
しかし、このNotificationを独自に作ることはできないようなので、カスタムクラスの監視をしたい場合は、KVOを独自に組み込んでいく必要があるんです。
このデザイン・パターンに関する勉強を以前しました。Swift 4になって少し機能拡張がありましたが、それほど大きな変更は無かったようです。Appleは、NSNotificationクラスの拡張に注力しているようですね。
下記のリンクをSwift 4.2向けに書き換えました。
Swiftで遊ぼう! - 1001 - 新たに再出発の誓い... Core Dataに取り組む
- Swiftで遊ぼう!の前書き-> http://yataiblue.ashita-sanuki.jp:titlie
長い中断があり、50親父のアプリ開発計画も中断しそうになっていました。プログラミング勉強に割ける時間も僅かで、集中して勉強できないので仕方ないかもしれませんね。理解力もかなり落ちていて他人のコードが読めない(理解できない)ことも多々あります。
Swift言語の変化についていくのも大変です。勉強をはじめた頃はバージョン1だったのに、3年で4.2まで変化を遂げました。Swift言語はダイナミックに変化しているけど、未だにiOSの深層ではobjective-cも脈々と動き続けており、その理解も必要な時があります(T_T)
まあ、愚痴を言っていても仕方ないのでCore Dataの勉強に取りかかります。
Swift 3で導入されたNSPersistentContainerクラスは、データーベースであるSQLiteを利用すためのAPIを統括するような立場です。
データーベースで扱うデータは、一つ一つentity(エンティティー)と呼ばれます。これはNSManagedObjectクラスのインスタンスとして扱われるんです。複数のNSMangaedObjectクラスをまとめるのがNSManagedObjectModelで、それをコントロールするのがNSPersistentContainerと考えればいいでしょう。
プロジェクトを作成するときに「Use Core Data」チェックマークを入れておくと、Core Dataに関する初期ファイルが色々導入され初心者には便利です。しかし、このチェックマークは万能ではありません。色々と手入れしないと使えないんです。
まず、「プロジェクト名.xcdatamodeld」というファイルが作られています。これがデータ・モデル(NSManagedObjectMode)です。ビジュアルにentityを設定することができるのでデーターベース設計をするのが楽しくなるでしょう。
Swiftで遊ぼう! - 612 - CoreDataMyDemo - Swiftで遊ぼう! on Hatena で扱っているCoreDataMyDemo.xcdatamodeldをみると、entityは「Users」です。このentityは「NSManagedObject」クラスです。
ここでUtilitiesエリアからData Model Inspectorを選択すると以下のイメージ*1のように、「Codgen」という項目があり、デフォルトでは「Class Definition」が選択されています。クラスとして扱えるけど、コードでカスタマイズできません。
コードでカスタマイズできないということは、コードで扱うとき、必ず「NSManagedObject」クラスとして取り扱う必要があり少し面倒くさいです。カスタムクラスで扱うために、「Manual/None」を選択して、Moduleに「Current Product Module」を選んで、メニューの「Editor」→「Create NSManagedObject Subclass...」を選ぶと、NSManagedOnjectのサブクラスである「Users」クラスが生成されます。
let entity = NSEntityDescription.entity(forEntityName: "Users", in: context) let user = Users.init(entity: entity!, insertInto: context) user.username = "Yuji" user.password = "1234" do { try context.save() } catch let error as NSError { print("Error: \(error)") } let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Users") request.returnsObjectsAsFaults = false do { let result = try context.fetch(request) for data in result as! [Users] { print(data.username!) print(data.password!) } } catch let error as NSError { print("Error: \(error)") }
上記のように書き換えるとUsersクラスを扱えるようになり、そのプロパティである「username」や「password」を簡単に変更できるようになります。こうした方が便利ですよね。
*1:このイメージはXcode9.4です。Xcode10.0はβ版のためイメージが使えません
Swiftで遊ぼう! - 1000 - まだまだ道半ばで奮闘中... Core Data
- Swiftで遊ぼう!の前書き-> Life-LOG OtherSide
「Swiftで遊ぼう!」シリーズも今日の記事で1000回目です。パチパチパチ!
50親父のSwiftプログラミング、何度も挫折しそうになりながら続けています。
ド素人だったんですが、少し分かるようになりました。Core Dataがもう少し使えるようになって、ユーザーインターフェイスのデザインができるようになったらオリジナルアプリに取りかかろうと思います。
シンプルなオリジナルアプリを作って、AppStoreで公開するところまでこぎ着けたら一段落ですね。
Core Dataを使ったシンプルデモの後半部分をSwift 4.2でも動くようにコードを書き換えました。実はSwift 4.2が公開されたのですが、Core Data の大きな変更は無かったのでSwift 4向けに変更と言っていいでしょう。
昨日の記事に追記が入っています。
Swiftで遊ぼう! - 999 - Core Dataの復習に入ります。
- Swiftで遊ぼう!の前書き-> Life-LOG OtherSide
私の考えているアプリはデータの永続的な保存が必要になるんで、Core Dataを利用するつもりです。Swift 2ぐらいの頃から取り組んでいましたが、なかなか理解が進まず挫折を繰り返しながら、Swift 4まで引きずっています。2016年にNSPersistentContainerが導入されてCore Dataの扱いが少し楽になったというのに、私は無視していました。
今回Swift 4.2になったところで復習をします。
基本的なデータの書き込みと読み出しの復習をしました。
これだけ。
Swiftで遊ぼう! - 998 - SpriteKitのチュートリアルをSwift 4.2で動くようにしました。
- Swiftで遊ぼkう!の前書き-> Life-LOG OtherSide
乱数関連でSprite Kitのチュートリアルに変更を加えました。
自分で一生懸命取り組んでいた内容は復習しても覚えていますね。まだまだ理解が浅いところもありますが、見なおしに時間がかからなくなっています。本当にいつになったらへなちょこプログラミングから卒業できることやら。
今日はこれだけです。
Swiftで遊ぼう! - 997 - 以前の乱数のページを改訂しました。
- Swiftで遊ぼう!の前書き-> Life-LOG OtherSide
今日は下記のページの乱数に関する記述をSwift 4.2向けに改訂しました。
Swiftで遊ぼう! - 720 - もう少しランダム数を考える - Swiftで遊ぼう! on Hatena
ちょっとずつ既存の話題を最新のSwift 4.2に切り替えていきます。