"まだ"の力 [Swift]基礎辞書

学んだことを書いていきます。質問やエラーなどございましたらお気軽にコメントお願いします。

初心者、基礎を積み上げる「モジュール」

モジュールのインポート

クラスや関数の使い方に関する情報を取り込むためにimportする
システムが提供するSDKのディレクトリの中を探すとある.swiftdocや.swiftmoduleというファイル。これがSwiftが利用できるモジュールの情報。
(どこにあるか不明)
モジュール
Cocoa , UIKit , SpriteKitなど

モジュールのインポートの仕方

続きを読む

初心者、基礎を積み上げる「識別子」

識別子

識別子としてアスキー文字を用いる場合キャメルケースと呼ばれる方法で大文字と小文字を使う

  • そもそも識別子とは?

ある実体の集合の中で、特定の元を他の元から曖昧さ無く区別することを可能とする、その実体に関連する属性の集合のこと。

(var x = 100と記述した時の xの関数名などのこと?)

続きを読む

初心者、基礎を積み上げる「タプルで返す関数、キーワード付きタプル」

関数の処理結果を複数の値で受け取る場合

!タプルを返り値として関数を定義するのが簡単。(他にはinout引数を指定したり返り血を構造体にしたりする方法がある)
例として税をかけた商品の値段と割引後の値段を返す関数を定義する。(割引の値はパーセント単位)

func price( price:Double,rate:Double) -> (Double,Double) {
    let tax = 1.08  //税率
    let correctprice = price * tax  //税込価格
続きを読む

初心者、基礎を積み上げる「タプルと代入操作」

代入操作

タプルは同じ型を持つ変数に代入可能だが(前の記事参照)、さらに!一度の代入で各要素を別々の変数や定数に格納することが可能。

let attack = ("物理と魔法",30 ,70)
let ( description, physics,magic) = attack
print("\(description) \(physics) \(magic)")  //物理と魔法 30 70

2行目はdescription, physics,magicという3つの新しい定数を定義して、値を代入している。このような代入だと、タプルの要素を別々な定数に一気に代入できる。

!さらに一部の値が不要な場合は「 _ 」 で使わないことを明記。

let (description, _, _) = attack

この時の「_」は要素の数を合わせるために使用しているため、ないとエラーとなる。
Xcodeのplaygroundなどで試すとGood



!タプルにはどんなインスタンスも含むことができるので、タプルの中にタプルを含むことができる。

let status = ("攻撃力",(50,60))  //(String)と(Int,Int)の2つの要素をもったタプル
let (attack,(p,m)) = status    //要素を格納
let (name, _) = status       //(Int,Int)の値は使用しない場合

なお、この例で定数statusの50という値はstatus.1.0として参照できる。

タプルを使うと複数の値を同時に代入できる。これを利用するとSwap関数に相当する機能も容易に実現可能。

var a = 1, b = 0
(a,b) = (b,a)    //aにbを、bにaを代入
print("a = \(a), b = \(b) ")  // a=0,y=1と出力される

タプルを使ってフィボナッチ数列を計算するプログラム例

var x1 = 0, x2 = 1
print(" \(x1) ")
for var i = 0; i < 50; i++ {
    ( x1, x2) = ( x2, x1+x2)
    print("\(x1)")
}

ここまでのまとめ3つ

  1. 一度の代入で各要素を別々の変数や定数に格納することが可能。
  2. 一部の値が不要な場合は「 _ 」 で使わないことを明記。
  3. タプルの中にタプルを含むことができる。

参考書籍:

To Be Continue...


初心者、基礎を積み上げる「タプル」

タプルとは何か?

!タプルとは複数個のデータを組みにしてまとめたもの。関連し合う複数個の値をまとめて扱いたいが、専用の構造体やクラスを定義するほどでもない状況で活躍。特に、関数やプロパティから複数個の値を返すときに重宝する。
構造体などとは異なりタプルにはメソッドやプロパティを付け加えることはできない。一時的に保存する用途に使用するべきで、複雑なデータ構造を作るべきではない。


後半の難しい話は置いておいてまず重要なのは関数やプロパティから複数個の値を返すときに重宝ということ。

使用例
//体力

let HP : (String, Int) = ("ヒットポイント", 100)

なお、型名は省略可能。

let hp = ("ヒットポイント", 100)

タプルは二つと限定されているわけではないので多くの要素を持たせることも可能。

!タプルを型とする変数にタプルを代入するには、互いの要素の個数と型が同じでなければならない。

let hp = ("ヒットポイント", 100)
let attack : (String, Int,Int) = ("物理と魔法", 30, 70)
var status : (String, Int, Int) = attack //代入できる
status = hp //エラー hpは(String,Int)で型が異なる


!タプルの要素には「.0」のような記法でアクセスできる。

print("\(status.0)は\(status.1)と\(status.2)")    //物理と魔法は30と70
status.1 = 100                                      //statusは変数(var)なので代入可能
print("\(status.1)と\(status.2)")             //100と70

ここまでのまとめ3つ

  1. タプルとは複数個のデータを組みにしてまとめたもの。特に、関数やプロパティから複数個の値を返すときに重宝
  2. タプルを型の変数(var)にタプルを代入できるのは、互いの要素の個数と型が同じとき。
  3. タプルの要素には「.0」のような記法でアクセスできる。

参考書籍:
To Be Continue...