Swiftで遊ぼう! on Hatena

あしたさぬきblogでやってた初心者オヤジのiOSプログラミング奮闘記がHatenaに来ました

Swiftで遊ぼう! - 1004 - Xcode 10 beta 2

プログラミングの勉強してます。

まだまだ理解できていない内容なのでブログに書き残せない状態です。WWDC2018の動画で紹介されているプログラミングスタイルを自分で実装しようとしているのですが、WWDC2017やWWDC2016の内容を理解していないとできないことでした。

昔の内容を復習しながら新しい内容の勉強をしています。

そんかことしているとβ版の開発環境がバージョン2にアップデイトされていました。

これからダウンロードしてインストールします。

Swiftで遊ぼう! - 1003 - forEach(_:)

何事も毎日ちょっとずつちょっとずつ。

今日は単なる備忘録(^_^;)

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を復習

Core Dataの勉強をしているんですが、Key値を使ってValue値を取り出すことができるDIctionary型をみていて「Key Value Observing(KVO)」デザイン・パターンを思い出しました。

このデザイン・パターンは、iOSシステムに利用されていて、NSNotificationクラスが典型的なKVOデザイン・パターンだと思います。

しかし、このNotificationを独自に作ることはできないようなので、カスタムクラスの監視をしたい場合は、KVOを独自に組み込んでいく必要があるんです。

このデザイン・パターンに関する勉強を以前しました。Swift 4になって少し機能拡張がありましたが、それほど大きな変更は無かったようです。Appleは、NSNotificationクラスの拡張に注力しているようですね。

下記のリンクをSwift 4.2向けに書き換えました。

yataiblue.hatenablog.com

Swiftで遊ぼう! - 1001 - 新たに再出発の誓い... Core Dataに取り組む

長い中断があり、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」が選択されています。クラスとして扱えるけど、コードでカスタマイズできません。

f:id:yataiblue:20180614132403j:plain

コードでカスタマイズできないということは、コードで扱うとき、必ず「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で遊ぼう!」シリーズも今日の記事で1000回目です。パチパチパチ!

50親父のSwiftプログラミング、何度も挫折しそうになりながら続けています。

ド素人だったんですが、少し分かるようになりました。Core Dataがもう少し使えるようになって、ユーザーインターフェイスのデザインができるようになったらオリジナルアプリに取りかかろうと思います。

シンプルなオリジナルアプリを作って、AppStoreで公開するところまでこぎ着けたら一段落ですね。

Core Dataを使ったシンプルデモの後半部分をSwift 4.2でも動くようにコードを書き換えました。実はSwift 4.2が公開されたのですが、Core Data の大きな変更は無かったのでSwift 4向けに変更と言っていいでしょう。

yataiblue.hatenablog.com

昨日の記事に追記が入っています。

Swiftで遊ぼう! - 999 - Core Dataの復習に入ります。

私の考えているアプリはデータの永続的な保存が必要になるんで、Core Dataを利用するつもりです。Swift 2ぐらいの頃から取り組んでいましたが、なかなか理解が進まず挫折を繰り返しながら、Swift 4まで引きずっています。2016年にNSPersistentContainerが導入されてCore Dataの扱いが少し楽になったというのに、私は無視していました。

今回Swift 4.2になったところで復習をします。

yataiblue.hatenablog.com

基本的なデータの書き込みと読み出しの復習をしました。

これだけ。

Swiftで遊ぼう! - 998 - SpriteKitのチュートリアルをSwift 4.2で動くようにしました。

乱数関連でSprite Kitのチュートリアルに変更を加えました。

自分で一生懸命取り組んでいた内容は復習しても覚えていますね。まだまだ理解が浅いところもありますが、見なおしに時間がかからなくなっています。本当にいつになったらへなちょこプログラミングから卒業できることやら。

yataiblue.hatenablog.com

今日はこれだけです。