μ°Έκ³ μλ£
Swift 곡μ λ¬Έμλ₯Ό νκ΅μ΄λ‘ λ²μν μ¬μ΄νΈμ λλ€.
π» μ°Έκ³ μλ£μ λͺ¨λ λ΄μ©μ λ€λ£¨λ κ²μ΄ μλλΌ κ³΅λΆνλ©΄μ μλ‘κ² μκ² λ μ μμ£Όλ‘ μ 리νμ΅λλ€. λν, μ°Έκ³ μλ£μ΄μΈμλ μΆκ°μ μΌλ‘ 곡λΆν λΆλΆλ μ 리νμ΅λλ€.
μμμ λ³μ (Constants and Variables)
μ¬λ¬ κ°μ μμ λλ μ¬λ¬ κ°μ λ³μλ₯Ό μ μΈν λ μ½€λ§λ‘ ꡬλΆνμ¬ νμ€λ‘ μ μΈμ΄ κ°λ₯νλ€.
var x = 0.0, y = 0.0, z = 0.0
νμ λͺ μ (Type Annotations)
var welcomeMessage1: String // νμ
λͺ
μ
var welcomeMessage2 = "Welcome!" // νμ
μΆλ‘
νμ μΆλ‘ vs νμ λͺ μ
κ°νΉ νμ μΆλ‘ κ³Ό νμ λͺ μμ μ°¨μ΄λ₯Ό μ€λͺ νλ©΄μ λ κ°μ μλ λΉκ΅λ₯Ό νλ κΈλ€μ΄ μ‘΄μ¬νλ€. νμ μΆλ‘ μ κ²½μ° 'νμ λͺ μμ λΉκ΅νμ¬ Swift μ»΄νμΌλ¬κ° ν΄λΉ μμλ λ³μμ νμ μ μΆλ‘ νλ λ°μ μκ°μ΄ λ κ±Έλ¦¬μ§ μμκΉ' λΌλ κΆκΈμ¦ λλ¬Έμ μ΄λ¬ν μλ λΉκ΅λ₯Ό ν κ² κ°λ€.
νμ§λ§, λλΆλΆμ κΈλ€μ΄ μλμ κ°μ μ½λλ‘ μ€νμκ°μ λΉκ΅νκ³ μμλ€.
func measureTime(_ closure: () -> ()) -> TimeInterval {
let startDate = Date()
closure()
return Date().timeIntervalSince(startDate)
}
// νμ
μΆλ‘ μκ° μ²΄ν¬
measureTime {
for i in 1...1000000 {
let num = 0 + i
}
}
// νμ
λͺ
μ μκ° μ²΄ν¬
measureTime {
for i in 1...1000000 {
let num: Int = 0 + i
}
}
νμ§λ§, μ΄λ¬ν ν μ€νΈ μ½λλ μ»΄νμΌ μκ°μ 체ν¬νλ κ²μ΄ μλλΌ λ°νμμμμ μ€ν μκ°μ 체ν¬νλ μ½λμ΄λ€. num μμκ° λ°λ³΅λ¬Έμ λ λλ§λ€ μλ‘ μμ±λμ΄μ§λ κ²μ λ§μ§λ§ λ°νμμλ num μμμ μ΄κΈ°κ°λ§ κ²°μ λκ³ , Swiftλ μ μ νμ μΈμ΄λΌ μ»΄νμΌ μκ°μ num μμμ νμ μ΄ μ΄λ―Έ κ²°μ λκΈ° λλ¬Έμ ν μ€νΈμ κΆκ·Ήμ λͺ©μ μΈ 'Swift μ»΄νμΌλ¬κ° νμ μ κ²°μ νκΈ°κΉμ§μ μκ° μ°¨μ΄' μμλ λ²μ΄λλ ν μ€νΈ μ½λμ΄λ€.
κ·Έλ¬λ©΄ μ»΄νμΌ μλ μ°¨μ΄λ μ΄λ¨κΉ? κ²°λ‘ μ μ€νλ € νμ μΆλ‘ μ΄ λ λΉ λ₯Έ μ»΄νμΌ μλλ₯Ό 보μΈλ€κ³ νλ€. μ΄μ λ λ€μκ³Ό κ°λ€.
Swift μ»΄νμΌλ¬λ μ΅μ ν κΈ°λ₯μ΄ μ λμ΄μμ΄ μ μ΄μ νμ μΆλ‘ κ³Ό νμ λͺ μκ°μ μ»΄νμΌ μ±λ₯ μ°¨μ΄κ° κ΅μ₯ν λ―Έλ―Ένκ³ , νμ λͺ μκ° μ€νλ € λͺ μλ νμ κ³Ό μ΄κΈ°κ°μ λΉκ΅νλ μμ μ΄ μΆκ°λμ΄ μ‘°κΈ λ λ리λ€κ³ νλ€.
νμ μΆλ‘ κ³Ό νμ λͺ μμ μ¬μ© νλ¨ κΈ°μ€
κ²°λ‘ λΆν° λ§νμλ©΄, μ¬μ© νλ¨ κΈ°μ€μ κ°μΈ μ€νμΌ νΉμ νμμ μ¬μ©νλ 컨벀μ μ λ°λΌ λ¬λΌμ§ μ μλ€. μ¦, μ»΄νμΌ μκ°μ΄ ν¬λ¦¬ν°μ»¬ν μ΄μκ° λ μ λλ‘ μ¬μ΄μ¦κ° κ±°λν νλ‘μ νΈμ΄λ©΄ λλλ‘ νμ μΆλ‘ μ μ¬μ©νλ κ²μ΄ μ’μ§λ§, κ·Έκ²μ΄ μλλΌλ©΄ λ μ¬μ©ν΄λ μκ΄μλ€λ κ²μ΄λ€.
νμ§λ§, κΌ νμ λͺ μλ₯Ό μ¬μ©ν΄μΌ ν κ²½μ°κ° μλ€.
- μ΄κΈ°κ°κ³Ό λ€λ₯Έ νμ μ μ¬μ©νκΈ°λ₯Ό μν λ
let one = 1
print(type(of: one)) // Int
let two: Double = 2
print(two) // 2.0
let a = "A"
print(type(of: a)) // String
let b: Character = "B"
print(type(of: b)) // Character
- μμλ λ³μλ₯Ό μ μΈμ νμ§λ§, μμ§ κ°μ ν λΉνκ³ μΆμ§ μμ λ
var totalWeight: Int
let leftDumbbellWeigth = 10
let rightDumbbellWeight = 10
let isAssemble = true
if isAssemble {
totalWeigth = leftDumbbellWeigth + rightDumbbellWeight
} else {
totalWeigth = 0
}
μ λ κ°μ§ μν©μ΄ μλ λμλ νμ μΆλ‘ μ μ¬μ©νλ νμ λͺ μλ₯Ό μ¬μ©νλ μ΄λκΉμ§λ κ°μΈμ μ€νμΌμ΄λ€. νμλ νμ μ ν λ μ€μν μν μ νλ μμλ λ³μμλ νμ λͺ μλ₯Ό μ¬μ©νκ³ λ³λ‘ μ€μνμ§ μμ μμλ λ³μμλ νμ μΆλ‘ μ μ¬μ©νλ€.
μΈλ―Έμ½λ‘
λ§μ μΈμ΄μ λ€λ₯΄κ² Swiftλ μ½λμ κ° κ΅¬λ¬Έ λ€μ μΈλ―Έμ½λ‘ μ΄ νμκ° μλλ€. κ·Έλ¬λ μ¬λ¬ ꡬ문μ νμ€λ‘ μμ±ν κ²½μ° μΈλ―Έμ½λ‘ μ νμλ‘ μμ±λμ΄μΌνλ€.
let cat = "π±"; print(cat)
// Prints "π±"
μ μ
- λΆνΈ μλ μ μ νμ
Int8, Int32, Int64, Int
Intλ 32-bit νλ«νΌμμλ Int32, 64-bit νλ«νΌμμλ Int64μ κ°μ ν¬κΈ°λ₯Ό κ°μ§λ€.
- λΆνΈ μλ μ μ νμ
UInt8, UInt32, UInt64, UInt
UIntλ Intμ λμΌνκ² νλ«νΌμ λ°λΌ μλμΌλ‘ λ§μΆ€ν ν¬κΈ°λ₯Ό κ°μ§λ€.
- κ° νμ μ΄ ννν μ μλ μ΅λ, μ΅μκ° νμΈ
print(Int.max) // 9223372036854775807 (64-bit νλ«νΌμμμ μ΅λ ν¬κΈ° == Int64.max)
print(Int.min) // -9223372036854775808
print(Int32.max) // 2147483647
print(Int32.min) // -2147483648
print(UInt8.max) // 255
print(UInt8.min) // 0
β» μ μμκ° μμλ³΄λ€ ννκ°μ΄ νλ λ λ§μκ°
μ»΄ν¨ν°μμλ μμλ₯Ό 2μ 보μλ‘ νννλ€. μ΄μ§μμ μμ νν λ°©μ μ€ λΆνΈμ μ λκ°, 1μ 보μλ 0μ +0, -0κ³Ό κ°μ΄ λ κ°μ§λ‘ νν νλ€. μ¦, λΆνΈ λΉνΈκ° 0μΌ λμ λΆνΈ λΉνΈκ° 1μΌ λ 0μ μλ―Ένλ μ΄μ§μκ° λ λ€ μ‘΄μ¬νλ€λ κ²μ΄λ€. λ°λ©΄, 2μ 보μλ λΆνΈ λΉνΈκ° 0μΌ λ 0μ μλ―Ένλ μ΄μ§μλ§ μ‘΄μ¬νλ€. λ°λΌμ, μμ°μ€λ λΆνΈ λΉνΈκ° 1μΈ κ²½μ°μ ννν μ μλ κ°μ΄ νλ λ λκ² λλ€. (8bitμΈ κ²½μ° 10000000)
- μ μ 리ν°λ΄
let decimalInteger = 17
let binaryInteger = 0b10001 // 17μ μ΄μ§μ νκΈ°λ²
let octalInteger = 0o21 // 17μ 8μ§μ νκΈ°λ²
let hexadecimalInteger = 0x11 // 17μ 16μ§μ νκΈ°λ²
let oneMillion = 1_000_000 // κ°λ
μ±μ μν λ°μ€ ν¬ν¨ κ°λ₯
λΆλ μμμ μ«μ
- Double
- 64-bit λΆλ μμμ μ«μ νκΈ°
- μ΅μ 15μ리 μμμ μ νλ
- Float
- 32-bit λΆλ μμμ μ«μ νκΈ°
- μ΅μ 6μ리 μ νλ
β» λΆλ μμμ
μ»΄ν¨ν°μμ μ΄μ§ μμλ₯Ό λ€λ£° λμλ λ κ°μ§ λ°©μμ΄ μ‘΄μ¬νλ€. 첫 λ²μ§Έλ 32-bit κΈ°μ€ μ΅μμ 1λΉνΈλ₯Ό λΆνΈ, κ·Έ λ€μ 15λΉνΈλ₯Ό μ μλΆ, λ¨μ 16λΉνΈλ₯Ό μμλΆλ‘ νννλ κ³ μ μμμ λ°©μμ΄λ€. μ΄λ¬ν κ³ μ μμμ λ°©μμ λ€λ£° μ μλ λΉνΈμ μκ° νμ λμ΄μμ΄ λ λ§μ ννμ ν μ μλ€λ λ¬Έμ κ° λ°μνλ€.
μ΄λ¬ν λ¬Έμ μ μ ν΄κ²°ν λ°©μμ΄ λ°λ‘ λΆλ μμμ μ΄λ€. λ¨Όμ , μμ§ μμλ₯Ό μ΄μ§ μμλ‘ λ°κΎΌ κ²μ μ κ·νλ₯Ό κ±°μΉλ€. μ κ·νλ μ΄μ§ μμλ ±(1.κ°μλΆ)×2^μ§μλΆ-127 λ‘ ννλλ€. μ΄ μ κ·νλ₯Ό κ±°μΉ μλ₯Ό 32-bit κΈ°μ€ μ΅μμ 1λΉνΈλ₯Ό λΆνΈ, κ·Έ λ€μ 8λΉνΈλ₯Ό μ§μλΆ, λ¨μ 23λΉνΈλ₯Ό κ°μλΆλ‘ νννλ λ°©μμΌλ‘ λ λ§μ ννμ ν μ μκ² λλ€.
Floatνμ΄ 32-bit λΆλ μμμ μ«μλ₯Ό νκΈ°νλλ° μ¬μ©λκ³ , Doubleνμ΄ 64-bit λΆλ μμμ μ«μλ₯Ό νκΈ°νλ€. 64-bit λΆλ μμμ μ μ΅μμ 1λΉνΈλ₯Ό λΆνΈ, κ·Έ λ€μ 11λΉνΈλ₯Ό μ§μλΆ, λ¨μ 52λΉνΈλ₯Ό κ°μλΆλ‘ νννμ¬ Floatνλ³΄λ€ λ λμ μ λ°λλ₯Ό κ°μ§κ³ μμλ₯Ό ννν μ μλ€.
β» λΆλ μμμ μ€μ°¨
print(1.1 + 0.1 == 1.2) // false
Swift λΏλ§ μλλΌ IEEE 754 νμ€ λΆλ μμμ λ°©μμ μ¬μ©νκ³ μλ λͺ¨λ νλ‘κ·Έλλ° μΈμ΄μμλ μμ κ°μ κ²°κ³Όκ° λμ¨λ€. μλνλ©΄, λΆλ μμμ μ μ΄μ©νμ¬ μμλ₯Ό ννν λ μ€μ°¨κ° μκΈ°κΈ° λλ¬Έμ΄λ€.
μ€μ°¨κ° μκΈ°λ μ΄μ λ κ°λ¨νλ€. 1/3μ μμ§ μμμ μΌλ‘ νννλ©΄ 0.3333... κ³Ό κ°μ΄ 무νμμλ‘ ννλλ κ²μ²λΌ λ€λ₯Έ μ§λ²μμλ 무νμμκ° λλ μλ€μ΄ μ‘΄μ¬νλ€. μ΄μ§λ² κ°μ κ²½μ°μλ μμ§μ 0.1μ μ΄μ§ μμμ μΌλ‘ νννλ©΄ 0.001100110011... κ³Ό κ°μ΄ 무νμμλ‘ ννλλ€. μ΄λ¬ν 무νμμλ₯Ό μ»΄ν¨ν°μμ λ€λ£°λ €λ©΄ 32-bit(Float) νΉμ 64-bit(Double)λ‘ λ€λ€μΌ νλλ° λΉμ°ν 32bit νΉμ 64bit μ΄νμ κ°λ€μ΄ μλ΅λκΈ° λλ¬Έμ μ€μ°¨κ° λ°μν μ λ°μ μλ€.
λμ± μ½κ² μκΈ°νλ©΄ λ€μκ³Ό κ°λ€. μ€κ³ λ±νκ΅ μν λ¬Έμ λ₯Ό ν λ λ³΄ν΅ λ¬΄νμμμΈ πμ κ°μ 3.14λΌ μ§μ νκ³ κ³μ°μ νκ²λλ€. λ°λΌμ, π + 1 = 4.14 μ΄μ§λ§, μ€μ λ‘λ κ·Έλ μ§ μκ³ μλ΅λ μμμ λ§νΌ μ€μ°¨κ° μκΈ΄λ€. μ΄λ¬ν μΌλ€μ΄ μ»΄ν¨ν° λ΄μμλ λ²μ΄μ§κ³ μλ€κ³ μκ°νλ©΄ μ΄ν΄νκΈ° μ¬μΈ κ² κ°λ€.
λ°λΌμ, μμλ₯Ό λ€λ£¨λ νλ‘κ·Έλλ°μ μ΄λ¬ν μ€μ°¨λ₯Ό νμ μΌλν΄λκ³ μμ΄μΌνλ€.
- λΆλ μμμ 리ν°λ΄
let decimalDouble = 12.1875
let exponentDouble = 1.21875e1 // 12.1875λ₯Ό μ§μκ° 1μΈ 10μ§μλ‘ νκΈ°
let paddedDouble = 000123.456 // μλΆλΆμ 0μ μ±μλ λ¬Έμ μμ
let justOverOneMillion = 1_000_000.000_000_1 // μμλΆλ λ§μ°¬κ°μ§λ‘ κ°λ
μ±μ μν΄ λ°μ€ ν¬ν¨ κ°λ₯
- μ μμ λΆλ μμμ λ³ν
let pi = 3.14159 // Doubleλ‘ νμ
μΆλ‘
let anotherPi = 3 + 0.14159 // λ§μ°¬κ°μ§λ‘ Doubleλ‘ νμ
μΆλ‘
let three = 3 // Intλ‘ νμ
μΆλ‘
let pointOneFourOneFiveNine = 0.14159 // Doubleλ‘ νμ
μΆλ‘
let pi = three + pointOneFourOneFiveNine // Error: Int + Double λΆκ°
let pi = Double(three) + pointOneFourOneFiveNine // 3.14159
let integerPi = Int(pi) // 3
κ°κ° λ€λ₯Έ νμ λΌλ¦¬μ μ°μ°μ λΆκ°νμ¬ μλ‘ κ°μ νμ λΌλ¦¬μ μ°μ°μ΄ λκ² λ³νν΄μΌ νλ€. μ΄λ, λΆλ μμμ κ°μ μ μ κ°μΌλ‘ μ΄κΈ°νν λ μμμ μλλ₯Ό λ²λ¦Όνλ€. μλ₯Ό λ€μ΄, 4.75λ 4, -3.9λ -3μ΄ λλ€.
νν
ννμ νλμ ννμ κ°κ° λ€λ₯Έ νμ μ κ°λ€μ λ΄μ μ μμ΄ λ°ν κ°μ΄ μ¬λ¬ κ°μΈ ν¨μμ μ μ©νκ² μ¬μ©λλ€.
- ννμ λΆν΄(decompose)
let http404Error = (404, "Not Found")
let (statusCode, statusMessage) = http404Error
print("The status code is \(statusCode)") // 404
print("The status message is \(statusMessage)") // Not Found
let (justTheStatusCode, _) = http404Error // _ μ μ¬μ©νμ¬ λ¬΄μν μ μμ
print("The status code is \(justTheStatusCode)")
// μΈλ±μ€λ₯Ό μ¬μ©νμ¬ ννμ κ°λ³ μμ μ κ·Ό
print("The status code is \(http404Error.0)") // 404
print("The status message is \(http404Error.1)") // Not Found
- Named Tuple
let http200Status = (statusCode: 200, description: "OK")
print("The status code is \(http200Status.statusCode)") // 200
print("The status message is \(http200Status.description)") // OK
print(type(of: http200Status)) // (statusCode: Int, description: String)
μ΅μ λ
μ΅μ λμ Swift μΈμ΄μ κ½μ΄λΌ ν μ μμΌλ―λ‘ μ‘°κΈ λ μμΈνκ² λ€λ£¨κ³ μΆμ΄ λ€λ₯Έ κΈμ μ°Έκ³ ν΄μ£ΌκΈΈ λ°λλ€.
μλ¬ μ²λ¦¬
func canThrowAnError() throws {
// this function may or may not throw an error
}
throws ν€μλλ₯Ό μ¬μ©νμ¬ ν΄λΉ ν¨μλ μλ¬κ° λ°μν μ μμμ λνλ΄μΌ νλ€. μλ¬κ° λ°μν μ μλ ν¨μλ₯Ό νΈμΆν λλ ννμ μμ try ν€μλλ₯Ό λΆμ¬μΌ νλ€. ν¨μ νΈμΆμ do ꡬ문μΌλ‘ λννλ©΄ μλ¬κ° λ°μν λ catch μ λ‘ μ νλλ€.
func makeASandwich() throws {
// ...
}
do {
try makeASandwich()
eatASandwich()
} catch SandwichError.outOfCleanDishes {
washDishes()
} catch SandwichError.missingIngredients(let ingredients) {
buyGroceries(ingredients)
}
μμΈν μλ¬ λ°μ, ν¬μ°©, μ νλ μλ¬ μ²λ¦¬ ννΈμμ λ€λ£° κ²μ΄λ€.
μμ€κ³Ό μ μ 쑰건
μμ€κ³Ό μ μ 쑰건μ λ°νμμ μΆκ° μ½λλ₯Ό μ€ννκΈ° μ μ νμ μ‘°κ±΄μ΄ μΆ©μ‘±λλ μ§ νμΈν μ μλ λλ²κΉ λ¬Έλ²μ΄λ€. μμ€μ μ€μ§ λλ²κ·Έ λΉλμμλ§ μ²΄ν¬λκ³ , μ μ 쑰건μ λλ²κ·Έμ νλ‘λμ λΉλ λͺ¨λμμ 체ν¬λλ€. μ¦, μμ€μ κ°λ° μ€μ μ€μλ μλͺ»λ κ°μ μ μ°Ύλ λ° λμμ΄ λκ³ μ μ 쑰건μ νλ‘λμ μμ μ΄μλ₯Ό λ°κ²¬νλ λ° λμμ΄ λλ€.
- μμ€μ ν΅ν λλ²κΉ
let age = -3
assert(age >= 0, "A person's age can't be less than zero.")
// νλ‘κ·Έλ¨ μ’
λ£ ν "Assertion failed: A person's age can't be less than zero." μλ¬ λ©μμ§ μΆλ ₯
μ½λκ° μ΄λ―Έ μ‘°κ±΄μ΄ μ²΄ν¬λμλ€λ©΄ assertionFailure() ν¨μλ₯Ό μ¬μ©νμ¬ μΆλ ₯ν μλ¬ λ©μΈμ§λ₯Ό μμ±ν μ μλ€.
if age > 10 {
print("You can ride the roller-coaster or the ferris wheel.")
} else if age >= 0 {
print("You can ride the ferris wheel.")
} else {
assertionFailure("A person's age can't be less than zero.")
}
- μ μ 쑰건
let array = [1, 2, 3, 4]
let index = -1
precondition(index > 0, "Index must be greater than zero.")
// νλ‘κ·Έλ¨ μ’
λ£ ν "Precondition failed: Index must be greater than zero." μλ¬ λ©μμ§ μΆλ ₯
print(array[index])
λ§μ°¬κ°μ§λ‘, μ΄λ―Έ μ‘°κ±΄μ΄ μ²΄ν¬λμλ€λ©΄ preconditionFailure() ν¨μλ₯Ό μ¬μ©νμ¬ μΆλ ₯ν μλ¬ λ©μΈμ§λ₯Ό μμ±ν μ μλ€.
'iOS > Swift' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift] Extension (1) | 2024.10.29 |
---|---|
[Swift] Objective-C (1) | 2024.10.28 |
[Swift] - μ½λ μ νμ (Collection Types) (0) | 2024.10.27 |
[Swift] - κΈ°λ³Έ μ°μ°μ (Basic Operators) (0) | 2024.10.26 |
[Swift] - λ¬Έμμ΄κ³Ό λ¬Έμ (Strings and Characters) (0) | 2024.10.25 |
λκΈ