詳しい文法の説明ではなく、
文法を思い出すポケットリファレンス的にご利用ください。
コメントアウト
// Comment /* Comment */
変数宣言
定数
let
変数
var
アクセス修飾子(Access Control)
public
全てのモジュールからアクセスできます。
外部プロジェクトからもアクセスが可能です。
外部ライブラリとして外部からアクセスが必要時に設定します。
internal
同じモジュール(プロジェクト内)なら全てのモジュールからアクセスが可能になります。
アクセス修飾子を省略すると、internal になります。
private
同じファイル内からのみ、アクセスが可能です。
外部からのアクセスが必要でない限りこちらで設定します。
変数での例
// Public public let int : Int = 23 // Internal internal let int3 : Int = 23 let int2 : Int = 23 // Private private let int4 : Int = 23
関数での例
// Public public class publicClass {} // Internal internal class internalClass {} class internalClass2 {} // Private private class privateClass {}
クラスでの例
// Public public func publicFunc() {} // Internal internal func internalFunc() {} func internalFunc2() {} // Private private func privateFunc() {}
文字型
String
let name = "太郎" var name : String = "次郎"
Character
var name : Character = "次"
数値型
Int
let age = 23 var age2 : Int = 19 // 二進数 let binary : Int = 0b10101010111 // 八進数 let octal : Int = 0o254 // 十六進数 let hexadecimal : Int = 0x05abc
Int の種類とサイズ
■ Int8
8ビット
-128 〜 127
■ Int16
-32,768 〜 32,767
■ Int
32ビットOSの場合は Int32 64ビットは Int64
■ Int32
32ビット
-2,147,483,648 〜 2,147,483,647
■ Int64
64ビット
-9,223,372,036,854,775,808 〜 9,223,372,036,854,775,807
■ UInt8
8ビット
0 〜 255
■ UInt16
16ビット
0 〜 65,535
■ UInt
32ビットOSの場合は UInt32 64ビットは UInt64
-2,147,483,648 〜 2,147,483,647
■ UInt32
32ビット
0 〜 4,294,967,295
■ UInt64
64ビット
0 〜 18,446,744,073,709,551,615
Double
64ビット浮動小数点
var speed = 19.4334534534 var speed : Double = 19.4334534534
Float
32ビット浮動小数点
var speed = 0.23445556 var speed : Float = 0.23445556
Bool
ブーリアン型(真偽型)
let manager = true var manager2 : Bool = true
Optional
nil を扱う事のできる変数を宣言できる
var pvCount : Int? = 20 pvCount = nil var pcName: String? pcName = nil var pvCount : Int! = 20 pvCount = nil var pcName: String! pcName = nil var testString2: String? = nil var testString2: String? = "あいうえお" if testString2 != nil { print("String is \(testString2!)") } var testString3: String? = "あいうえお" if let number = testString3 { print("String is \(testString3)") } var testString4: String? = "あいうえお" if testString4?.hasPrefix("あいう") ?? false { print("No あいう") } let possibleString: String? = "An optional string." let forcedString: String = possibleString! let assumedString: String! = "An implicitly unwrapped optional string." let implicitString: String = assumedString var emptyString = "" if emptyString.isEmpty { print("empty") } nil 結合演算子 var optionalInt: Int? let someValue: Int if optionalInt != nil { someValue = optionalInt! } else { someValue = 0 } let someValue = optionalInt ?? 0
If 文
Int
let ifInt = 10 if ifInt < = 10 { print("1 - 10 です。") }else if ifInt <= 100 { print("11 - 100 です。") }else if ifInt == 200 { print("200 です。") }else{ print("else 以外です。") }
String
let ifString = "String" if ifString == "String" { print("String です。") }else{ print("String ではないです。") }
Bool
let ifBool = true if ifBool { print("true です。") } let ifBoolFirst = true let ifBoolSecond = false if ifBoolFirst && ifBoolSecond { print("OK!") } let ifBoolFirst = false let ifBoolSecond = true if ifBoolFirst || ifBoolSecond { print("OK!") }
三項条件演算子
let someValue = anyBoolean ? 1 : 0
For 文
For
for var i = 0; i < 3; ++i { print(i) }
For-In
// i が 0,1,2 だったら for i in 0..<3 { print(i) } // i が 0,1,2 で、i を 2 で割った余りが 0 だったら for i in 0..<3 where i % 2 == 0 { print(i) } let numbers: [Int?] = [0, nil, 3, 4, nil] // ? で制御しているので、nil の場合は実行しない。 for case let i? in numbers { print(i) }
While 文
var i = 0 while i < 3 { print(i) ++i }
Repeat-While 文
var i = 0 repeat { print(i) ++i } while i < 3
Switch 文
// 数値型 var number = 10 switch number { case 10: print("10") case 20: print("20") default: print("他") } // 文字型 var vehicle = "bike" switch vehicle { case "bike": print("バイク") case "car": print("車") default: print("その他の乗り物") } // 範囲で指定する場合 let number: UInt = 42 switch number { case 0..<10: print("0-9") case 10..<100: print("10-100") case 100..<1000: print("100-1000") default: print("default") }
Do スコープ
Do スコープを利用すると、変数のスコープの範囲を指定できます。
do { let name = "John" print("Hello \(name)") } let name = "Taylor" print("Hello again \(name)")
Tuple
let human = ("太郎", 21) let (name, age) = human print(human.0) print(human.1) let human = (name: "太郎", age: 21) print(human.age)
Array
let seasons = ["春", "夏", "秋", "冬"] print(seasons[0]) for season in seasons { print(season) } var seasons: [String] = [] seasons.append("春") seasons.append("夏") let seasons = ["春", "夏", "秋", "冬"] let count = seasons.count for i in 0..
Set
let seasons: Set = ["春", "夏", "秋", "冬"] if seasons.contains("春") { print("Yes") } for season in seasons { print(season) }
Dictionary
let seasons = [ "春" : 1, "夏" : 2, "秋" : 3, "冬" : 4, ] if let season = seasons["春"] { print(season) } for (season, number) in seasons { print(season) print(number) }
クラス
スタティッククラス、スタティック変数、混在
public class Test { // スタティック変数 public static var nickName : String = "たろ" // インスタンス変数 var name : String = "太郎" var age : Int = 0 // イニシャライザ、引数なし init(){ self.name = "匿名" age = 0 } // イニシャライザ、無名呼び出し可能 init(_ name: String) { self.name = name } // イニシャライザ、引数2つ init(name: String , age : Int) { self.name = name self.age = age } // 関数、引数なし、戻り値あり func sayNameAndAge() -> String? { return self.name + " " + String(self.age) + " 歳 です。" } // スタティック関数、引数なし、戻り値なし static func sayNickName(){ print(nickName) } }
継承
class ViewController : UIViewController { // メソッドのオーバーライド override func viewDidLoad() { super.viewDidLoad() } }
プロトコル
// プロトコルのみを実装 class ViewController : UITableViewDelegate, UITableViewDataSource { // プロトコル実装は省略してます。 }
継承とプロトコル
// 継承する場合は、一番左で宣言、その後にプロトコル。 class ViewController : UIViewController , UITableViewDelegate, UITableViewDataSource { // プロトコル実装は省略してます。 }
おすすめの本