2016年9月25日日曜日

000:ホーム

Swift についてざっくりとまとめてみました。よく使いそうなところをプレイグラウンドで動作確認しています。サンプルのコードでは、説明のため変数名や関数名を日本語名にしていますが、本番のプロジェクトでは標準的なコーディング規約に従うべきでしょう(参考:Cocoa向け コーディング ガイドライン)。また学習のために、型の省略が可能な場所でもできる限り明示的に型を記述しています。コードは、現バージョンで一応動作するというものです。バージョンアップされた場合や、より良い方法や、分かりやすいコードに気づいた場合は随時変更していく予定です。


2016/09/20 時点の動作環境とメニュー
Xcode 8, Swift3.0,2.3
Xcode 8 と Swift 3 が正式にリリースされたので、プレイグランドのサンプルコードを2から3へ移行しました。
Swift2と3の違いやマイグレーションのヒントなども随時追加する予定です。
Xcode8には、マイグレーションツールが付属するので、Swift2プロジェクトからSwift3プロジェクトへの移行は、Xcodeのドキュメントを参考にしてください。
実用的なサンプル
文字列処理、正規表現、ファイル操作を扱った例
ファイル名を解析して、ファイル情報をJSON形式でファイルに保存します。
ファイルをリードして、JSONデータを解析します。
タプル、書式を扱った例


2016年9月20日火曜日

010:Swift 3 基本


変数と定数

プレイグラウンド:

1.宣言 2.値の出力 3.型の別名

別名は便利ですが、精通するまではできるだけ何かで包まない方が学習が速いと思います。

4.型注釈 5.値の代入 6.整数境界/型安全と型推論 7.数値定数 8.数値型変換

タプル

複数の値を一組にしたもので、配列と似ているが、異なる型の値をまとめることができる。
後から要素を追加したり削除することはできない。
配列も異なる型を入れることができるが、各要素を演算等で使用する場合にキャスト(型変換)が必要になる。
プレイグラウンド:

オプショナル

プレイグラウンド:

1.オプショナルとは 2.if文と強制アンラップ 3.オプショナル・バインディング 4.明示的にアンラップされたオプショナル

文字列と文字

文字列オブジェクトはUnicode文字の配列として実装されます。
プレイグラウンド:

1.長さ 2.結合と分割(配列に分割、配列から結合)
Swift3では標準ライブラリで関数の名前が大きく変わりましたが上記の例に見るように次のようなルールになってます。
2.2: componentsSeparatedByString(separator: String)
3.0: components(separatedBy: String)
2.2: joinWithSeparator(separator: String)
3.0: joined(separator: String)
詳しくはリファレンスを参照してください。
3.置換
2.2: stringByReplacingOccurrencesOfString(target: String, ...)
3.0: replacingOccurrences(of: String, ...)
4.削除 5.部分文字列
2.2: substringWithRange(aRange: Range)
3.0: substring(with: Range)
6.トリミング
2.2: stringByTrimmingCharactersInSet(set: NSCharacterSet)
3.0: trimmingCharacters(in: NSCharacterSet)
7.サブスクリプト 8.書式設定 9.URL文字列の検査

020: Swift 3 コレクション


配列 Arrays

プレイグラウンド:

1.配列の作成 2.配列のメソッド 3.配列にアクセスする 4.様々な型の配列

セット Sets

セットは同じ型の異なる値を保持。順序は不定。
プレイグラウンド:

1.宣言と挿入 2.空かチェック(isEmpty) 3.配列から作成 4.要素の削除 5.要素が含まれるかチェック(contains) 6.ソートとループ 7.集合演算

辞書 Dictionaries

プレイグラウンド:

030: Swift 3 関数

関数

2016/11/01: 更新

  (パラメータリスト) -> (戻り値)

プレイグラウンド:

1.定義と呼び出し 2.関数を戻り値として返す 3.可変引数 4.ローカル引数名と外部引数名 5.引数のデフォルト値

040: Swift 3 クロージャー

クロージャ

  { (引数リスト)  ->  (戻り値) in 文 }

Cのブロック、他のプログラミング言語のラムダに類似。定義の前後関係から定数と変数の参照を捕えて、保存できる。
プレイグラウンド:

1.シンタックス
2.配列の sort メソッド
3.トレイリング・クロージャ
4.クロージャを引数に取る配列のメソッド
  1. filter
  2. reduce
  3. map

050: Swift 3 クラスとストラクチャ


概要

クラスとストラクチャには以下の共通点がある:
クラスにはさらに以下の特徴がある
  • 別のクラスから特徴を継承できる
  • 型キャストにより、実行時にクラス・インスタンスの型を調べて解釈できる
  • 非イニシャライザにより、クラス・インスタンスが割り当てたリソースを解放できる

クラスとストラクチャ

プレイグラウンド:

1.クラスとストラクチャの定義 2.インスタンスの生成 3.プロパティにアクセスする 4.参照型と値型
ストラクチャと列挙型は値型、クラスは参照型です。 5.アイデンティティ・オペレータ(=== : オブジェクトが等しい, !== : オブジェクトが異なる)

クラスとストラクチャのどちらを使うか?

次の場合はストラクチャが適している:
  • 比較的単純な値をカプセル化する
  • インスタンスのカプセル化された値を割り当て時に参照ではなくコピーしたい
  • ストラクチャに保持されるプロパティはそれ自身が値型である
  • 別の型のプロパティや振る舞いを継承する必要がない
ストラクチャの例:
  • Double 型の幅と高さを持つ幾何学図形のサイズ
  • Int 型の開始番号と長さを持つ範囲
  • 三次元座標の点:Double 型の x, y, z を持つ

String、Array、Dictionary はストラクチャです。
NSString、NSArray、NSDictionary はクラスです。

継承

プレイグラウンド:

1.ベースクラスと継承クラス 2.as によるキャスト

初期設定と終了設定

プレイグラウンド:

1.初期設定 2.終了設定 3.イニシャライザの種類と規則

060: Swift 3 プロパティとメソッド


プロパティ

クラス、ストラクチャ、列挙型が持つ属性。
例)社員クラスプロパティ:= (社員番号, 氏名, 入社年月日, ...)
プレイグラウンド:

1.保持プロパティ 2.計算プロパティ

メソッド

クラス、ストラクチャ、列挙型が持つ機能の実装
プレイグラウンド:

1.インスタンスメソッド 2.値型(ストラクチャと列挙型)のプロパティの修正 3.タイプメソッド