Swiftで遊ぼう! on Hatena

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

Swiftで遊ぼう! - 1012 - プロトコール指向プログラミング(POP)の復習

詳解 SWIFT 第4版 を読むのもつまらなくなってきました。ただ、だらだらと記述されている内容を追いかけるのは退屈です。やっぱり少しでもSwift 5に関連した内容を読みたいので、平行して他の本にも手を出してしまいました。

ということで、プロトコール指向プログラミングの復習をしました。

yataiblue.hatenablog.com

すんなり頭に入りますね。

Swiftで遊ぼう! - 1011 - メモリーリーク!

WWDC2019 開催も間近なのに、詳解SWIT 4版を、読んでいるというのもピント外れかもしれない(^_^;)

関数オーバーロードを読んで、ジェネリックを読んでいると、以前の記事が気になり、ARCのチュートリアルを復習して、ジェネリック・ラッパーの復習もしました。すっかり忘却の彼方だった概念が戻ってきています。というか、改めて自分の記事を読むと、理解しやすいです。一生懸命ブログに残していたことが役に立っています。

ARCの基礎を復習して、メモリーリークを生じさせないようにしましょう。

yataiblue.hatenablog.com

Swiftで遊ぼう! - 1010 - オーバーロード

 詳解 SWIFT 第4版を読み直しているという話をしたけど、じっくり読んでいると、まだまだ知らなかったこと(それとも忘れてしまっていたこと?)に巡りあい、勉強になっています。

 でも、Swiftのことを全く知らなかった頃に比べれば、理解力は、かなり進歩しています。関数のオーバーロードという機能を知らなかったけど、「こりゃジェネリックス使うだろ」ってツッコミが自然に出ましたよ。

 WWDC2019が始まるまでに読みなおせるかな?

Swiftで遊ぼう! - 1009 - ブログ記事を書く環境も変えています

毎日、少しずつ、コツコツと勉強をするって、何を成し遂げるにおいても重要な姿勢だ。

何度も挫折を繰り返しているプログラミングを続けるために、このブログを立ち上げたのに、更新しなくなるってことは、勉強も途絶えているということになる。

今までは、MacBookProを使って、ブログを書いていたんで、手間がかかっていました。

いちいちノートブックを立ち上げて、Xcodeを使いって、コードを確認しながら記事を書くのは本当にめんど臭いんです。今まで、よく続いたと思う。

今は、できるだけ、簡単にブログの記事を書きたいと思っている。

新しいiPad Proを購入しようかどうしようか考えていたところ、iPad Airが発売されました。古いiPad Proと同じサイズで、初代Apple Pencil、Smart Keyboardやケースも流用できるため、躊躇なく、買い換えたんです。

いまどきのiOSマルチタスク対応なんで、Kindle本を読みながら、Playgroundでコードを確かめながら、記事が書けるようになっていて便利です。

ということで、詳解 SWIFT 第4版を読みすすめるにあたって、しばらく、このスタイルでブログ更新をしようと思っている。

こうなると、急に新しいiPad Proが欲しくなる悪いクセが出てきました(^_^;)

Swiftで遊ぼう! - 1008 - まじでやばい!詳解 SWIFT 第4版の復習!

Swiftの環境が劇的に変化しているのに、私のプログラミングの知識は滞っています。

毎日コツコツ勉強、と言いながら、中断した状態で 1年以上経過してしまった(^_^;)

誰もが、こういう風にして、挫折していくのでしょう。

まだiOSアプリもできていないのに(汗)

Swift4をいまだに理解していないことに気が付く...

なんと「詳解 SWIFT 第4版」を購入していたことにも気づく。

なんとなく読み進めて復習することから始めよう。

CHAPTER01 Swiftでプログラミング

1.1 データ型と変数

読み進めると、知らないことに遭遇しますね。10進整数、16、8、2進数でも、桁数を分かり訳するために、数字と数字の間に「 _ 」を加えることができるんですね。しらなかった。

というか、16進数を実数値として表すとい「 p 」の使い方が理解しがたい

var a = 0x1
// これは問題なく定義できる

var b = 0x1.0
// こうするとエラーが生じる。

// しかし、こうするとオッケー
var c = 0x0.1p0

16進数で、2のべき乗計算の有用性がまだ分からない。どういう時に利用するのか、保留のまま続ける。

Swiftで遊ぼう! - 1007 - ちょっと余談です

 「Swiftsで遊ぼう!」シリーズのファンになってくださっている皆さんにご報告!

3年前からSwiftの勉強を初めて、いまだにアプリの発表ができない屋台ブルーです(^_^;)。私は今年の10月で53歳になります。ということは、50歳からの事始めでプログラミングを始めたって事です。私がプログラミンの勉強を始めた理由を知っていますか? 実は「アンチエイジング」なんです。アンチエイジングとは、「抗加齢」という意味で、日本抗加齢医学会の専門医です。40歳を超えると肉体的にも精神的にも衰えていきます、精神的に抗うために新しいチャレンジとしてプログラミングの勉強を選んだんです。プログラミングの経験は無いけど、MacオタクなんでSwiftを選びました。3年間独学で勉強を続けてプログラミングの世界を少しだけ垣間みれていると思ってます。変化の激しいこの業界についていけてませんが、まだまだ新しもの好きは健在でこれからも勉強を続けます。

只今、東京行きの新幹線に乗っています。心技体のアンチエイジングを突き進めるために大きな転換点を迎えるかもしれません。いずれプログラミングの本も出版したいと思っているので、私のブログを読んでプログラミングを初めた人がいらっしゃればコメントをください。

私と同じように50代でプログラミングの勉強を始めた人もいらっしゃればコメントください。

私自身、コメントがあればモチベーションも‘キープできるんです。お願いします。

Swiftで遊ぼう! - 1006 - Layout-Driven UI を極めるための一歩

WWDC2018のビデオを見ていると、何でも簡単に実装できそうに思えるのですが自分で試そうとすると、直ぐに行き詰まってしまいます(T_T)

「Adding Delight to your iOS App」のLayout-Driven UIトレーディングカードの動きを実装しようとしてるんですが、最初の簡単なデモからちゃんと動かないんです。壇上の二人はシンプルで簡単に実装できるって言ってるんですけどね。

簡単なデモが紹介されているけど、「Cool Guy」のコードがその例です。カンファレンスで示されているMyViewクラスは、CoolViewクラスをサブビューとして持っていますが、シンプルにするためにサブビューは省きました。

class MyView: UIView {
    
    var feelingCool = true {
        didSet {
            setNeedsLayout()
        }
    }

    override func layoutSubviews() {
        super.layoutSubviews()
        self.isHidden = !feelingCool
    }
}

プロパティ・オブザーバーで値の変化を監視して描画させるというのは旨いやり方ですね。これを実装すると、feelingCoolの値が変化するたびに、このクラスのインスタンスが出現したり消えたりします。ちゃんとLayoutが変化してるんです。しかし、切り替えは一瞬です。パッパッと切り替わるので美しくはありません。プレゼンテーションではCool Guyがジワーっと出現したり消えたりしています。

じゃあこのシンプルなデモにUIViewPropertyAnimatorクラスでアニメーションを加えてみました... あれこれコードを試してみてもうまく動かないんです。

一人で勉強していて困ることは、分からないところに直面すると解決するのに時間がかかるところです。ネットで情報を探してみてもなかなか答えが見つかりません。

こういう時はアップルの公式ドキュメントを読むのが一番いい方法のようですね。UIViewPropertyAnimatorを調べてみると、アニメーションを加えることができるプロパティは次のものだけということを知りました。

  • frame
  • bounds
  • center
  • transform
  • alpha
  • backgroundColor

これで理解できました!メソッド「.isHidden」でアニメーションになりませんね。ということで次のようにコードを書き換えました。

class MyView: UIView {

    var feelingCool = true {
        didSet {
            setNeedsLayout()
        }
    }

    override func layoutSubviews() {
        super.layoutSubviews()
        if feelingCool {
            self.alpha = 1
        } else {
            self.alpha = 0
        }
    }
}

おお!これでアニメーションがちゃんと動きました!次はジェスチャーとの組み合わせに関してもう少し勉強します。