詳しい文法の説明ではなく、
文法を思い出すポケットリファレンス的にご利用ください。
コメントアウト
// 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 {
// プロトコル実装は省略してます。
}
おすすめの本
