[Swift] Basics

🔥 Swift - The Basics



✨ Constants and Variables

var x = 0.0, y = 0.0, z = 0.0 // 여러 상수 또는 변수를 쉼표로 구분하여 한 줄에 선언할 수 있다.

<br>

---
### ✨ Type Annotations
* 상수 또는 변수가 저장할 수 있는 값의 유형을 명확히하기 위해 사용한다.
* 상수 또는 변수 이름 뒤에 콜론, 공백, 타입을 차례로 선언한다.
* 초기값이 지정되지 않은 경우, Type Annotations으로 타입을 선언한다.
* 초기값이 지정된 경우, Type Annotations으로 타입이 선언되어 있지 않아도 타입 추론이 가능하다.
```swift
var welcomeMessage: String
var red, green, blue: Double // 한 줄에 선언한 변수들에 동일한 유형의 타입을 정의할 수 있다.



✨ Naming Constants and Variables


✨ Comment


✨ Semicolons


✨ Integers

✔️ Integer Bounds

✔️ Int

✔️ UInt


✨ Floating-Point Numbers


✨ Numeric Literals


✨ Numeric Type Conversion

✔️ Integer Conversion

✔️ Integer and Floating-Point Conversion

let three = 3
let pointOneFourOneFiveNine = 0.14159
let pi = Double(three) + pointOneFourOneFiveNine // Int -> Double 변환
let integerPi = Int(pi) // Double -> Int 변환



✨ Type Aliases


✨ Booleans

if turnipsAreDelicious { print(“Mmm, tasty turnips!”) } else { print(“Eww, turnips are horrible.”) }

<br>

---
### ✨ Tuples
* 튜플은 여러 값을 단일 복합 값으로 그룹화한다.
* 튜플은 반환 값이 여러 개인 함수에서 특히 유용하게 사용할 수 있다.
* 튜플 내의 값은 모든 유형이 될 수 있으며, 서로 동일한 유형일 필요는 없다.
```swift
let http404Error = (404, "Not Found")
// http404Error is of type (Int, String), and equals (404, "Not Found")


// Prints “The status code is 404” print(“The status code is (statusCode)”)

// Prints “The status message is Not Found” print(“The status message is (statusMessage)”)

<br>

* 튜플 내의 값 중 일부만 필요할 경우, 언더스코어(`_`)를 이용하여 불필요한 부분을 무시할 수 있다.
```swift
let (justTheStatusCode, _) = http404Error

// Prints "The status code is 404"
print("The status code is \(justTheStatusCode)")


// Prints “The status message is Not Found” print(“The status message is (http404Error.1)”)

<br>

* 튜플을 정의할 시, 튜플 내의 각 값에 이름을 지정할 수 있다.
* 튜플 내의 각 값에 이름을 지정한 경우, 해당 값에 접근하기 위해 지정한 이름을 이용할 수 있다.
```swift
let http200Status = (statusCode: 200, description: "OK")

// Prints "The status code is 200"
print("The status code is \(http200Status.statusCode)")

// Prints "The status message is OK"
print("The status message is \(http200Status.description)")



✨ Optionals

let possibleNumber = "123"
let convertedNumber = Int(possibleNumber)
// convertedNumber is inferred to be of type "Int?", or "optional Int"

✔️ nil

// serverResponseCode now contains no value serverResponseCode = nil

// surveyAnswer is automatically set to nil var surveyAnswer: String?

<br>

#### ✔️ If Statements and Forced Unwrapping
* if문으로 `optional`과 `nil` 값을 비교해서 `optional`이 값을 지니고 있는지 알아낼 수 있다.
```swift
if convertedNumber != nil {
    print("convertedNumber has an integer value of \(convertedNumber!).")
}
// Prints "convertedNumber has an integer value of 123."


✔️ Optional Binding

✔️ Implicitly Unwrapped Optionals

let assumedString: String! = “An implicitly unwrapped optional string.” let implicitString: String = assumedString // no need for an exclamation point

<br>

---
### ✨ Error Handling
* 실행 중 프로그램에서 나타나는 문제의 에러 상황에 따라 응답할 때 사용한다.
* 에러 처리는 내재하는 실패 원인을 판별하고, 필요한 경우 프로그램의 다른 부분으로 해당 에러를 전달할 수 있다.
* 에러 상황을 마주한 함수는 에러를 `throws`하고, 해당 함수의 호출자는 에러를 잡아내고 적절하게 응답할 수 있다.
* 이러한 함수는 에러를 `throws`할 수 있다는 것을 나타내기 위해 `throws` 키워드를 포함해야 한다.
```swift
func canThrowAnError() throws {
    // this function may or may not throw an error
}


func makeASandwich() throws {
    // ...
}

do {
    try makeASandwich()
    eatASandwich()
} catch SandwichError.outOfCleanDishes {
    washDishes()
} catch SandwichError.missingIngredients(let ingredients) {
    buyGroceries(ingredients)
}

✨ Assertions and Preconditions

✔️ Debugging with Assertions

✔️ Enforcing Preconditions


📝 References