目次
基本知識
大文字・小文字の区別有り
Stringはstringと記載するとエラーとなる
宣言
定数(let)
letで宣言
定数のため一度だけ値を代入可能
let str: String
変数(var)
varで宣言
変数のため何度でも値を代入可能
var str: String
宣言と同時に代入
「=」で続けて代入
var str:String = "hello world"
最初に覚える型
型の種類
- Int:数値型 (例 100)
- Double:浮動小数点 (例 1.25)
- String:文字列 (例 Hello World)
型変換の方法
数値を文字列として扱う場合はString()で囲む
var str: Stringstr = S tring(3)
演算
演算子
演算子 | 内容 |
+ | 加算 |
– | 減算 |
* | 乗算 |
/ | 除算 |
% | 余り |
自分自身との演算の省略形
x += y
x = x + 5
x += 5
x += 5
文字列の操作
文字列の結合
「+」で結合する
str1 + str2
ダブルクォーテーション中への埋込み
バックスラッシュ括弧の中に記入
print (こんにちは、\(name)さん")
\()の中でも演算可能
print (“りんごが\(count1 + count2)個あります”)
print (“りんごが\(count1 + count2)個あります”)
Mac:Option + ¥
Bool値の操作
演算子 | 意味 | 解説 |
&& | AND | 全てTrueの場合にTrue |
|| | OR | 一つでもTrueの場合にTrue |
! | NOT | TrueであればFalse |
print(true && false) //false print(true || false) //true print(!ture) //false
条件分岐
if
演算子 | 解説 |
== | 同じ場合にtrie |
!= | 異なる場合にtrue |
> | 右辺より大きい場合にtrue |
>= | 右辺以上の場合にtrue |
< | 右辺より小さい場合にtrue |
<= | 右辺以下の場合にtrue |
if judge {print(root1)}else if{print(root2)else{print(root3)}
条件 ? A : B
message = myPoint >= 60 ? “OK” : “NG”
message = myPoint >= 60 ? “OK” : “NG”
switch
switch myPoint {case 0:print("NG")case 1, 2, 3:print("so..so..")case 4...6:print("4~6")case 7..<10print("7~9")case let n where n > 100:print("\(n)ポイント!!!")default:print("NA")}
何もしない場合はそのcase文の下に「break」を記載
ループ処理
while
while count < 5 {print(count)count += 1}
絶対に一度は実行したい場合に使用する
条件文が下部にあるため、条件を満たさなくとも1回は実行されるrepeat {
print(count)
count += 1
} while count < 5
条件文が下部にあるため、条件を満たさなくとも1回は実行されるrepeat {
print(count)
count += 1
} while count < 5
for
for 変数 in 集合 {処理}
for i in 0...10 {print(i)}
break,continue
ループ操作の命令 | 解説 |
break | ループから出る |
continue | 次のループを開始する |
for i in 0...10 {if i == 5 {break}print("break test \(i)")}for i in 0...10 {if i == 5 {print("continue test \(i)")}print(i)}
オプショナル型
let s: Optional<String> = nillet s: String? = nil
オプショナル型はnilでないことを確認する必要がある
if s != nil {print(s!)}
オプショナル型から値を取り出すには変数の後ろに「!」を付ける
オプショナルバインディング
if let value = s {print(value)}
str ?? nilの処理
print(str ?? "これはnilです")
複数の値の整理(配列・タプル・集合・辞書)
種類 | 例 | 特徴 |
配列 | scores: [Int] = [50, 40] | 順序有り |
タプル | 順序有り | |
集合 | 順序無し、重複禁止 | |
辞書 | キー |
配列
var points: [Int] = [100, 50]var points = [100, 50]print(prints[0])
points.count 要素数
points.isEmpty 空かどうか調べる
要素の追加
var fruits = [String]()fruits.append("apple")fruits += ["banana"]for str in fruits {print(str)}
タプル
異なる型も入れられる
var items = ("apple",100)print(items.0)print(items.1)let (product, amount) = itemsprint(product)print(amount)
値の破棄
let (product, _) = itemsprint(product)
初期化で名前を付けることも可能var items = (product: "apple", amount: 5)print(items.product)
集合
var winners: Set<Int> = [3,5,8,8]var winners: Set = [3,5,8,8]print(winners) //[5,3,8]print(winners.contains(3)) //3が有るか boolwinners.insert(10) //追加winners.remove(5) //削除print(winners.count)
空の集合
let s = Set<Int>()print(s.isEmpty) //true
let a: Set = [1,3,5,8]let b: Set = [3,5,8,9]print(a.union(b)) //和集合 a + bprint(a.intersection(b)) //積集合 aとbの共通print(a.subtracting(b)) //差集合 a - b
辞書
var points: Dictionary<String, Int> = ["tanaka" : 100, "satoh" : 200]points["satoh"] = 300print(points["tanaka"] ?? "NA")points["suzuki"] = 500print(points.count)for (key, value) in points {print("\(key) : \(value)")}
空の辞書の作成
let d = [String: Int]()print(d.isEmpty)
関数
func 関数名() {処理内容}
func hello() {print("hello")}func helloReturn() {return "hello"}print(helloReturn())
引数
func hello(name: String) {print("hello (name)")}print(name: "tanaka")引数と実行変数を別にする場合func hello(from name: String) {print("hello (name)")}print(from: "tanaka")
引数に変数名を付けない場合
func hello(_ name: String) {print("hello (name)")}print("tanaka")
初期値を持たせる場合
func hello(_ name: String = "satoh") {print("hello (name)")}print()
引数は定数となる(下記はエラー)
func add100(x: Int) {x += 100print(x)}
引数に代入したい場合はinout
実行の変数前には「&」を付ける
また、実行の変数は引数の値を受け取る
func add100(x: inout Int) {x += 100}var i = 100add100(x: &i)print(i)
クラス
最初の一文字は大文字
クラス内の変数や定数はプロパティーと呼ぶ
初期値はinit()を使用する
class User {let name: Stringvar point: Intinit() {self.name = "tanaka"self.point = 100}}let user1: User = User()//let user1 = User() 型推論でも可能print(user1.name)user1.point = 200
イニシャライザ
class User {let name: Stringvar point: Intinit(name: String, point: Int) {self.name = nameself.point = point}}let suzuki = User(name: "suzuki", point: 300)
引数の省略
class User {let name: Stringvar point: Intinit(_ name: String, _ point: Int) {self.name = nameself.point = point}}let suzuki = User("suzuki", 300)
initは引数が異なればいつくでも指定可能複数のinit
class User {let name: Stringvar point: Intinit(_ name: String, _ point: Int) {self.name = nameself.point = point}init() {self.name = "nanasi"self.point = 0}}let nanasi = User()print(nanasi.name)print(nanasi.point)
計算プロパティ
プロパティに動的に値を取得
class User {let name: Stringvar point: Intvar level: Int {get {return Int(point / 10)}set{if newValue >= 0 {point = newValue * 10}}}init(_ name: String, _ point: Int) {self.name = nameself.point = point}let satoh = User("satoh", 50)print(satoh.level)satoh.level = 5print(satoh.point)satoh.level = -10print(satoh.point)
随時追記