Swiftで遊ぼう! on Hatena

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

Swiftで遊ぼう! - 926 - Xcondeで変数名を変更

スタンフォード大学iOS講座でSwift開発の復習をしていて、Xcodeの知らなかった機能があったので記録します。

yataiblue.hatenablog.com

コードを書いていて、自分で作った変数名が気に入らない時に一括して変更する方法があります。

例えば、次のように変数名「pbo」を変更したい場合、「pbo」を選択します。すると選択した言葉の右側に小さな三角ボタンが現れます。

f:id:yataiblue:20170309062549j:plain

この三角ボタンをクリックするとメニューが表示され、「Edit All in Scope」を選びます。

f:id:yataiblue:20170309062647j:plain

同一スコープ内の変数名を同時に編集できます。

f:id:yataiblue:20170309062821j:plain

コードを書いている時、適切な変数名が思いつかずわかりにくい名前をつけてしまっても後で簡単に変更することができるので便利です。

これだけです。

Swiftで遊ぼう! - 925 - Introduction to to iOS 10, Xcode 8 and Swift 3

Developing iOS 10 Apps with Swift - Free Course by Stanford on iTunes U

スタンフォード大学のポール先生のiOS講義が始まりました。

ある程度Swiftの勉強をしている人は勉強するいいチャンスです。

私のように2度途中で挫折している人にもいいでしょう。そうです私は3度目のチャレンジになりますが、こういう人は少ないかも。

さっそく最初の講義を聴いています。

Introduction to to iOS 10, Xcode 8 and Swift 3

iOSの開発環境の基本的な説明から入って、すぐに「Calculator」プロジェクトがスタートします。

Xcodeの簡単な説明から入って、UIButtonをViewの上に設置してボタンのタイトルを「7」にします。ViewController.swiftに「Ctrl + ドラッグ」して、@IBActionを設置して「関数」の説明をします。

クリックした時の挙動をコンソールで確認した後にViewにUILabeを設置して、ボタンをクリックしてラベルに表示をさせます。

そしてオペランド(演算子)の「π」の挙動の制御をします。コントロールフローの基本的な説明をする中で、オプショナルの説明が入ります。今まで繰り返し勉強した内容なので頭に簡単に入ってきます。

そして、このデモの最も重要な説明は、「Computed Properties(計算型プロパティ)」でしょう。

計算機のラベルに表示する数字は「String型」ですが、コードで扱う数字は「Double型」です。そのため計算して表示する時にString型からDouble型に、Double型からString型に、常に変換をしなければなりません。それを簡略化するために計算型プロパティを使用します。

let operand = Double(display.text!)!
display.text = String(sqrt(operand))

この多重変換をすっきりさせるために次のような計算プロパティを用意します。

var displayValue: Double {
        
    get {
        return Double(display.text!)!
    }

    set {
        display.text = String(newValue)
    }
        
}

これを使用したら最初のコードがシンプルになります。

let operand = displayValue
displayValue = sqrt(operand)

すっきりしました。これで講義1は終了です。

Swiftで遊ぼう! - 924 - Developing iOS 10 Apps with Swift

マルチスレッドの復習しててまだ完全に理解できていないのに話題が変わります!私の大好きなスタンフォード大学のポール先生のiOS開発講座がiOS10対応になりました! 超嬉しい!

Developing iOS 10 Apps with Swift - Free Course by Stanford on iTunes U

ポール先生の講座、iOS8、iOS9、そして今回で3回目です。

今度こそ全ての講座をやり遂げるつもりで講義を聴きます。

今からわくわくしてます。

Swiftで遊ぼう! - 923 - マルチスレッドの考え方で混乱していました。

マルチスレッドなプログラミングの勉強をしていて、自分の理解が甘かったことが分かってきました。

スレッド、キュー、タスク、同期、非同期...

どうもこれらの関係性をしっかり理解していなかったためコードを勉強していてもしっくり頭に入らなかったんです。

「スレッド」とはプロセッサに依存したiOSの低レベルでの処理のようでした。Swiftを使ってこのスレッドの制御をすることもできるようですが、プログラマは処理を全て制御しないといけないようで、私のような素人では太刀打ちできそうもありません。

細かい制御を自動的に請け負ってくれる上位のシステムとしてAppleGCDOperationクラスを用意しているようです。OOPに準拠した新しい制御はOperationクラスなんで、今後はOperationに移行していくのかもしれません。しかし、Swift 3で大幅な改訂があったのはレガシー*1なGCDな訳で、今年のWWDC2017でマルチスレッドに関する新しい発表があるまでGCDの使い方を理解することにします。

*1:今まさに現役で使われている機能なんで間違った言い方かもしれませんね。

Swiftで遊ぼう! - 922 - Serial と Concurrent キュー

Queues

一連のコードブロックをQueueというグルーピングにします。これを英語で「dispatch queue」と言います。これをコードで表現すると「DispatchQueue」です。そして複数のスレッドが生じた時に安全にコードを実行させるために、適切なdispatch queueのタイプを選択して機能を利用しないといけないんです。

基本的にQueueは2種類あります。「Serial」と「Concurrent」です。Serial queueはタスクを1つずつこなすのでGCDは実行タイミングだけコントロールできますが、どのくらい時間がかかりいつ終わるか知ることはできません。

Concurrent queueは複数のタスクを同時に実行させることができます。実行開始時の順番は保証されていますが、タスクの終了タイミングはタスクにより異なる場合があります。

f:id:yataiblue:20170228095518j:plain

Swiftで遊ぼう! - 921 - これからしばらくGCDの勉強します。

マルチスレッドのチュートリアルを書いて基本的な概念は理解したような気になっていますが、まだまだ広い見識は備わっていません。さらなる邁進が必要なんで勉強します。

マルチスレッドの基本的な内容の復習をしていきます。Swiftで遊ぼう! - 302 - マルチスレッド(まとめ) - Swiftで遊ぼう! on Hatenaでも説明していますが、Swift 3からGCDに大きな改訂が加わりました。

これを少し詳しくみていきます。

Concurency

「Concurency」はiOS開発の現場でなんと言うのでしょう?そのまま英語読みで「コンカレンシー」でしょうか? よく分からないので「Concurency」と英語のまま表記していきます。日本語の意味は「並行性」です。似たような言葉で「Parallelism」があります。これを日本語で言うとなんでしょう?「パラリズム」ですか?意味は「平行性」です。

iOSはThread(スレッド)という処理単位を複数同時にこなす(マルチスレッド)システムを備えています。同時処理で実行することを「Parallelism」といいます。そして、この平行性実行はプロセッサの数やシステムに依存するってことです。次のイメージを見ます。
f:id:yataiblue:20170227124351j:plain

Paralleismを実行する構造に真のParallelismとConcurrencyがあるんです。例えば2つのプロセッサがあれば、2つのThreadをまさに平行にこなすことができます。しかし、プロセッサが1つなら、2つのThreadを切り替え(スイッチ)ながら同時処理します。これがConcurencyってことで、構造的に同時性を実現していることを意味します。

ここまで。

Swiftで遊ぼう! - 920 - NSURLSession関連のもう1つのチュートリアル改訂

カテゴリーからNSURLSessionが無くなりました。もう1つあったNSURLSessionのチュートリアルをURLSessionに切り替えました。

yataiblue.hatenablog.com