【Swift】基本文法まとめ(前編)

プログラミング初心者の勉強ブログ #132

ジーズでSwiftの授業取ったはいいものの、授業のスピードがだいぶ早く、そもそもSwift文法すらよくわかっていない状態では授業が頭に入ってきづらいと悟ったので、一旦時間を割いてドットインストールでSwift基礎を勉強したまとめ。Swift3だが、全36回分の動画で大体の文法を網羅してくれている。授業で謎だった引数の書き方あたりがしっくりきたので収穫であった。(長いので前中後編に分ける)

 

目次

[toc]

 

変数・定数 / データ型

// 定数は let
// 変数は var

let msg: String = "hello world"

// Int型で定数定義
let i: Int = 10
let i = 10

// Float Double
let d = 53.8

// String
let s = "hello"

// Bool true/false
let flag = true

var x = "five"
x = String(5)

 

演算子

// 数値
print(10 / 3) // 3
print(10.0 / 3) // 3.3333
print(10 % 3) // 1

var y = 10
//y = y + 5
y += 5
print(y) // 15


// 文字列
print("hello " + "world")
print("y is \(y)")
print("y2 is \(y * 2)")


// 論理値 true false
print(true && false) // false
print(true || false) // true
print(!true) // false

 

条件分岐(if / switch)

// if文
let score = 40
let result: "" // String

// 基本
if score > 80 {
    result = "great"
} else if score > 60 {
    result = "good"
} else {
    result = "so so ..."
}

// 条件演算子
// 条件 ? A : B
result = score > 80 ? "great" : "so so ..."



// switch文
let num = 15

// 基本
switch num {
case 0:
    print("zero")
case 1, 2, 3:
    print("small")
case 4...6:
    print("4/5/6")
case 7..<9:
    print("7/8")
case let n where n > 20:
    print("\(n) is huge!")
default:
//    print("n.a.")
    break
}

 

繰り返し(for / while)

// for 変数 in データの集合 { 処理 }
// break
// continue

for i in 0...5 {
    if i == 3 {
//        break
        continue
    }
    print(i)
}

// while

var n = 10

while n < 3 {
    print(n)
    n += 1
}

//repeat {
//    print(n)
//    n += 1
//} while n < 3

 

配列

// 配列は全て中身が同じ型になる
// 可変長で、繰り返し処理も可能

// 基本
var scores: [Int] = [50, 40]

// 型省略
var scores = [50, 40]

// 取り出し
print(scores[0]) // 50

// 更新
scores[1] = 30

// その他
print(scores.count) // 2
print(scores.isEmpty) // false


// 空の配列
var names = [String]()

// 追加
names.append("田中")
names.append("鈴木")
names += ["佐藤"]

// forで取り出し
for name in names {
    print(name)
}

 

集合(Set)

// 基本(setは重複無視される)
var winners: Set<Int> = [3, 5, 8, 8]

// 型の省略
var winners: Set = [3, 5, 8, 8]

// 取り出し
print(winners.contains(3))

// 追加
winners.insert(10)

// 削除
winners.remove(5)

// 空の集合
let s = Set<Int>()
print(s.isEmpty)

// 集合の演算
let a: Set = [1, 3, 5, 8]
let b: Set = [3, 5, 8, 9]

print(a.union(b)) // 和集合
print(a.intersection(b)) // 積集合
print(a.subtracting(b)) // 差集合

 

タプル

// タプルは、最初に定義したときに長さが固定(可変長ではない)
// また、型の場所も固定になる(最初の定義時に1番目が文字列型、二番目が数値型だったら、再代入する場合も1番目が文字列型、二番目が数値型でなければならず、違う場合エラーが出る)

var items = ("apple", 5)
print(items.0)
items.1 = 8
print(items)

let (product, amount) = items
print(product)
print(amount)

let (product, _) = items
print(product)

var items = (product: "apple", amount: 5)
print(items.product)

 

辞書(Dictionary)

// 基本
var sales: Dictionary<String, Int> = ["a": 200, "b": 300]

// 型を省略
var sales = ["a": 200, "b": 300]

// 更新
sales["b"] = 500

// 辞書からの取り出しはオプショナル型を含む可能性があるためunwrap
print(sales["a"] ?? "n.a.")

// 値の追加
sales["c"] = 400

// countで数を取り出す
print(sales.count)

// タプルで分けて取り出す
for (key, value) in sales {
    print("\(key): \(value)")
}

// 空の辞書
let d = [String: Int]()
print(d.isEmpty)

 

Optional型

// nilの可能性を含む型
// 値を取り出す場合はunwrapする必要がある

// 基本
let s: Optional<String> = nil

// 省略形
let s: String? = nil

// unwrapその1
if s != nil {
    print(s!) // unwrap
}

// unwrapその2 (Optional Binding)
if let value = s {
    print(value)
}

// unwrapその3
print(s ?? "this is nil!")

 

inoutキーワード

// 関数の引数は基本は「定数」となる
// 引数で受けた変数に再代入したい場合はinoutキーワードを使う

func add10(x: inout Int) {
    x = x + 10
    print(x)
}

var i = 10
add10(x: &i) // 20
print(i) // 20(iの中身が再代入された値で保存される)

 

 

中編は【Swift】基礎文法まとめ(中編)から。

後編は【Swift】基礎文法まとめ(後編)から。

 

 

まとめ

Swiftはバージョンで互換性がなくなって過去のバージョンで作ってたアプリが壊れるらしい。そんなことを聞いてしまうと、学習コストつらーってなってしまうが、とはいうもののそんなこと気にしてたらいつまでもネイティブアプリ作れないのでとりあえず一回触れてみようと思う。エンジニアとしてWebとネイティブどっちも経験あるというステータスはなんかカッコ良い。魅力的。SwiftはRubyやPHPよりも型の規定が厳しいく、タプルとか集合の型はPythonでやったなーとか思いながら勉強していた。。iOSはSwiftのみで開発されていると思っていたが、結局iOSアプリ作るにはXcode環境でUIKitとか使いこなせないと開発できないんだということを理解した。

 

以上ありがとうございました。

 

 

 

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA