【Swift3.0】Swift의 기초 #1

12968 단어 iOSSwift3.0

소개



Swift의 기초와 자주 사용하는 패턴 등에 대해
오로지 모아 갑니다.

우선은, 기초로부터 정리합니다.

전제



다음의 개발 환경에서의 정보를 기재합니다.
Xcode 8.3이 아닙니다.


카테고리
버전


Swift
3.0.2

Xcode
8.2.1


Swift 버전을 확인할 수 있는 명령/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift --version↑↑ Xcode.app를 이름 바꾸고 있는 경우는 적절하게 읽어 주세요.

01. 변수와 상수



변수


var 変数名: 型名 = 初期値
Demo-1.swift
// Int型の変数numを宣言し、0で初期化
var num: Int = 0

// 変数numに1000を代入
num = 1000

// String型の変数strを宣言し、"foo"で初期化
var str: String = "foo"


상수


let 定数名: 型名 = 定数
Demo-2.swift
// Int型の定数height
let height: Int = 180

// String型の定数name
let name: String = "okuderap"

그건 그렇고, var는 Variable의 것 같습니다.
let은 Let을 그대로.

02. 형추론



명시적으로 형태를 선언하지 않고, 대입된 값으로부터 형태를 판별해 주는 녀석입니다.

Demo-3.swift
// String型
let str = "foo"

// Int型
var intVal = 10

// Double型
var doubleVal = 123.4

형추론 가능한 경우는 기본적으로 형추론을 이용하는 방향으로 가고 싶습니다.

03. Optional Type (옵션 타입)



Swift 보통 형은 nil를 사용할 수 없다.
nil을 할당하면 컴파일 오류가 발생합니다.

Optional Type은 nil(빈 값)을 사용할 수 있는 유형 중 하나입니다.

Demo-4.swift

// Optional Typeの宣言1
// 宣言のみの場合、初期値はnil
var str1: Optional<String>
print(str1) // nil

// Optional Typeの宣言2 (上と同じこと)
// 宣言のみの場合、初期値はnil
var str2: String?
print(str2) // nil


var str3: String? = "foo"
// nilの代入も可能
str3 = nil
print(str3) // nil

String?은 'Optional Type'이며 'String'은 유형이 다르기 때문에
String 의 메소드는 사용할 수 없다.

이미지로서는, 이하의 String 의 배열 (Array 형)이, String 의 메소드를 호출할 수 없는 것과 같습니다.


String?을 String으로 사용하기 위해 unwrap(언랩)을 할 필요가 있습니다.

unwrap : Optional 에서 T 형 변수를 검색합니다.
(T는 String이나 Int와 같은 유형을 나타냅니다.)

unwrap1. Forced Unwrapping



nil 여부에 관계없이 강제로 언랩합니다. nil이면 충돌이 발생합니다.fatal error: unexpectedly found nil while unwrapping an Optional value
Demo-5.swift
var text: String?

text = "foobar"
// !を付けて、強制アンラップして、Stringとして使用
let newText1 = "[new]" + text!
print(newText1) // [new]foobar

text = nil
// !を付けて、強制アンラップして、Stringとして使用
let newText2 = "[new]" + text!
print(newText2) // クラッシュ

충돌은 좋지 않으므로 기본적으로 사용하지 않는 것이 좋습니다.

unwrap2. Nil Coalescing Operator



만약 nil이라면 디폴트값을 넣는다.??라는 연산자를 사용합니다.

Demo-6.swift
/// nameプロパティだけを持つ単純なクラス
final class Man {
    // Optional Type
    static var name: String?
}

final class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // 定義するnameは、String型
        // Man.nameがnilだった場合は、"unknown"が入る
        let name = Man.name ?? "unknown"
        print(name)
    }
}

unwrap3. Optional Binding



만약 nil이 아니면 처리를 한다.
nil 판정과 정수화를 함께 해주는 이미지입니다.

Demo-7.swift
var array: [String] = ["a", "b", "c", "d", "e"]

// array.firstがnilでなければ、firstElementを定義してifブロック内の処理を実行
if let firstElement = array.first {
    // firstElementは、このifブロック内でのみ有効
    print("firstElement is \"\(firstElement)\"")
}

print("count: \(array.count)")

unwrap4. Optional Chaining



만약 nil이 아니면, 그 프로퍼티나 메소드에 액세스 한다.
Optional Chaining의 호출 결과는 Optional Type이 된다.
따라서 위의 Nil Coalescing Operator와 Optional Binding을 함께 사용합니다.

Demo-8.swift
var count: Int? = 0

// textがnilの場合はnilが返却される
// textがnilでない場合は文字数が返却される(Optional Type)
count = textField.text?.characters.count

Demo-9.swift
// Nil Coalescing Operatorを使用する場合
let count = textField.text?.characters.count ?? 0
print(count)

Demo-10.swift
// Optional Bindingを使用する場合
if let count = textField.text?.characters.count {
    print(count)
}

unwrap5. Guard Statement



만약 nil이라면 그 자리에서 처리를 종료한다. (조기 반환)

Demo-11.swift
func outputWomanName(woman: Woman?) -> Bool {

    // womanがnilの場合は早期リターンする
    guard let woman = woman else {
        return false
    }

    // womanがnilでない場合はunwrapしたwomanを使用できる
    print("name: \(woman.name)")
    return true
}

Implicitly Unwrapped Optional



Optional Type의 연산이 아닌 유형 중 하나는 Implicitly Unwrapped Optional입니다.

암묵적으로 Forced Unwrapping이 이루어진다.
Forced Unwrapping과 같이 nil이었을 경우는, 크래쉬 해 버린다.fatal error: unexpectedly found nil while unwrapping an Optional value
Demo-12.swift
var str: String! = "foo"
print(str)

str = nil
print(str) // クラッシュ

크래시는 좋지 않으므로 Forced Unwrapping과 마찬가지로 여기도 기본적으로 사용하지 않는 것이 좋다고 생각합니다.

사이고에게



이번에는
· 변수와 상수
・형 추론
· Optional Type (옵션 타입)
에 대해 모았습니다.
점점 추가 · 갱신하고 싶습니다.

좋은 웹페이지 즐겨찾기