"κΌΌκΌΌν μ¬μ μ¨μ Swift λ¬Έλ²νΈ" μ± μ 곡λΆνλ©° μ 리ν λ΄μ©μ λλ€.
β ν¨μκ° κ°μ§ μ΄μ ?
1. λμΌν μ½λκ° μ¬λ¬ κ³³μμ μ¬μ©λ λ, ν¨μννμ¬ μ¬μ¬μ©ν μ μμ΅λλ€.
2. μ¬λ¬ κΈ°λ₯μ νλμ μμ€ μ½λμμ μμ±νλ κ²λ³΄λ€ κΈ°λ₯ λ¨μλ‘ ν¨μννμ λ κ°λ μ±μ΄ μ’μμ§λλ€.
3. λ‘μ§μ λ³κ²½ν λ ν¨μ λ΄λΆλ₯Ό μμ νλ©΄ λκΈ° λλ¬Έμ μ©μ΄ν©λλ€.
β μ¬μ©μ μ μ ν¨μ μ μ
func testFunction(a: Int, b: Int) -> Int {
return a + b
}
κΈ°λ³Έμ μΈ ν¨μμ μ μ λ°©λ²μ μμ κ°μ΅λλ€.
ν¨μ μ΄λ¦μ 첫 κΈμλ λ°λμ μμ΄ λλ μΈλλ°λ‘ μμν΄μΌνκ³ ,
맀κ°λ³μ κ°μ΄ νμ μλ€λ©΄ λΉ μΉΈμΌλ‘ μλ΅ν μ μκ³ ,
λ°ν κ°μ΄ μλ€λ©΄ λ°ν κ° λν μλ΅ν μ μμ΅λλ€.
νμ§λ§ λ°ν κ°μ΄ μλ κ² μλ nilμ λ°ννκΈ° μν΄μλ λ°ν νμ μ΄ Optional νμ μΌλ‘ μ μλμ΄ μμ΄μΌ ν©λλ€.
β ν¨μμ νΈμΆ
result = testFunction(a: 3, b: 2)
print(result)
// 5
κΈ°λ³Έμ μΈ ν¨μμ νΈμΆ λ°©λ²μ μμ κ°μ΅λλ€.
Swiftμμλ λ νΉνκ² νΈμΆ ꡬ문 λ΄μ μΈμκ° μμ λ μ΄λΈμ΄ μ‘΄μ¬ν μ μλλ°, μ΄λ₯Ό μΈμ λ μ΄λΈμ΄λΌκ³ ν©λλ€.
π‘ μΈμ λ μ΄λΈ?
μΈμ λ μ΄λΈμ ν¨μ νΈμΆ μ μΈμκ°μ ꡬλΆνκΈ° μν΄ μ¬μ©λλ λ μ΄λΈλ‘, λ§μ½ μΈμ λ μ΄λΈ μμ΄ νΈμΆνλ©΄ μ»΄νμΌ μ€λ₯κ° λ°μν©λλ€.
μΈμ λ μ΄λΈμ μΌλ°μ μΌλ‘ 맀κ°λ³μ μ΄λ¦κ³Ό λμΌνλ©° μ μ½λμμ a, bλ 맀κ°λ³μμ΄μ μΈμ λ μ΄λΈμ λλ€.
μΈμκ°μ λͺ©μ μ νμ€νκ² λνλ΄μ£Όκ³ , λΉμ·νμ§λ§ μλ‘ λ€λ₯Έ μλ―Έλ‘ μ¬μ©λλ ν¨μλ₯Ό ꡬλΆν΄μ€λλ€.
μΈμ λ μ΄λΈμ΄ λ±μ₯νκ² λ λ°°κ²½μ Objective-C λλ¬Έμ΄μμ΅λλ€.
Cocoa, Cocoa Touch νλ μμν¬κ° Objective-Cμ λ¬Έλ²μ λ§μΆμ΄ μμ± λμ΄μκΈ° λλ¬Έμ μ΄μμ νΈνμ±μ μν΄ μ΄λ¬ν λ°©μμ μ±ννμ΅λλ€.
Objective-Cμμλ 맀κ°λ³μκ° λ κ°μΌ λλΆν° μΈμ λ μ΄λΈμ μ¬μ©ν΄ μ΄λ€μ ꡬλΆνκΈ° λλ¬Έμ, μΈμ λ μ΄λΈμ λ©μλλͺ μ ν¬ν¨νκ³ κ°μ μ΄λ¦μ λ©μλλΌλ μΈμ λ μ΄λΈμ΄ λ€λ₯΄λ€λ©΄ λ€λ₯Έ λ©μλλ‘ μΈμν©λλ€.
Swiftμμλ μ΄μ λμΌνκ² μΈμ λ μ΄λΈμ ν¨μλ₯Ό μλ³νλ λ° μ¬μ©ν©λλ€.
func tableView(_:, numberOfRowsInSection:)
func tableView(_:, cellForRowAt:)
func tableView(_:, heightForRowAt:)
μ΄ λλ¬Έμ μμ κ°μ΄ UITableViewμμ tableViewλΌλ κ°μ μ΄λ¦μ κ°μ‘μ§λ§ λ€λ₯Έ μ¬λ¬ ν¨μλ€μ μ¬μ©ν μ μμ΅λλ€.
β ν¨μμ λ°νκ°
Swiftμμ ν¨μλ λ°λμ νλμ κ°λ§ λ°νν΄μΌ ν©λλ€.
μ¬λ¬ κ°μ λ°ννκ³ μΆλ€λ©΄ μ΄ μ¬λ¬ κ°λ€μ νλμ μ§λ¨ μλ£ν (λ°°μ΄, νν, λμ λ리, ꡬ쑰체, ν΄λμ€)μ λ΄μμ λ°νν΄μΌ ν©λλ€.
func testReturn() -> (String, Int) {
let name = "Ted"
let age = 24
return (name, age)
}
μ μ½λλ ν¨μμμ μ΄λ¦κ³Ό λμ΄λ₯Ό νλμ ννμ λ΄μ λ°ννλ μμμ λλ€.
μ΄ λ λ°ννλ νΉμ ννμ΄ μ¬λ¬ κ³³μμ μ¬μ©λ κ²½μ°μ typealiasλ₯Ό ν΅ν΄ μλ‘μ΄ νμ μ μ μνλ κ²μ΄ μ’μ΅λλ€.
π‘ typealias?
typealias person = (String, Int)
typealiasλ 볡μ‘ν νμ ννμ μλ‘μ΄ νμ λͺ μΌλ‘ μ μν΄μ£Όμ΄ μ½λλ₯Ό κ°κ²°νκ² ν΄μ€λλ€.
μμ κ°μ΄ person νμ μ μ μνλ©΄, μκΉ μμ±νλ μ½λλ₯Ό μλμ κ°μ΄ λ°κΏ μ μμ΅λλ€.
func testReturn() -> person {
let name = "Ted"
let age = 24
return (name, age)
}
β μΈλΆ 맀κ°λ³μλͺ , λ΄λΆ 맀κ°λ³μλͺ
Swiftμμλ 맀κ°λ³μλ₯Ό μ©λμ λ°λΌ λ κ°μ§λ‘ λΆλ¦¬ν μ μμ΅λλ€.
μΈλΆ 맀κ°λ³μλ ν¨μ νΈμΆ μμ μΈμκ°μ λν μΈμ λ μ΄λΈ μν μ΄μ ν¨μμ μλ³μ μΌλΆ,
λ΄λΆ 맀κ°λ³μλ μΈμκ°μ ν¨μ λ΄λΆμμ μ°Έμ‘°νκΈ° μν΄ μ¬μ©νλ λ³μμ λλ€.
μΈλΆ 맀κ°λ³μλ₯Ό λ³λλ‘ μ§μ νμ§ μμ κ²½μ° μΌλ° 맀κ°λ³μκ° μΈμ λ μ΄λΈ μν κΉμ§ νμ§λ§, μΈλΆ 맀κ°λ³μλ₯Ό λͺ μμ μΌλ‘ μ§μ νλ©΄ μ΄λλΆν°λ μΈλΆ 맀κ°λ³μκ° μΈμ λ μ΄λΈμ΄ λκ³ ν¨μλ₯Ό νΈμΆν λ μΈλΆ 맀κ°λ³μλ₯Ό μ¬μ©ν΄μΌ ν©λλ€.
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
...
}
μμ tableView ν¨μ μ€ νλλ₯Ό μμλ‘ λ³΄μλ©΄, 첫 λ²μ§Έ μΈλΆ 맀κ°λ³μλ μΈλλ°(_)λ‘, λ λ²μ§Έ μΈλΆ 맀κ°λ³μλ heightForRowAtμΌλ‘ μ μλμ΄ μμ΅λλ€. μΈλΆ 맀κ°λ³μλͺ μΌλ‘ μΈλλ°(_)λ₯Ό μ¬μ©νκ² λλ©΄ μ΄λ μΈλΆ 맀κ°λ³μμ λ΄λΆ 맀κ°λ³μλ₯Ό λΆλ¦¬νλ μΈλΆ 맀κ°λ³μλͺ μ μ¬μ©νμ§ μκ² λ€λ λ»μ λλ€. ν¨μλ₯Ό νΈμΆν λ 맀κ°λ³μλͺ μ μλ΅ν΄λ λ©λλ€.
λν, 맨 μμ 맀κ°λ³μλ₯Ό μλ΅ν μ΄ κ΅¬μ‘°λ Cocoa Touch νλ μμν¬μμ λ§μ΄ μ¬μ©λλ λ°©μμ λλ€.
β κ°λ³ μΈμ
κ°λ³μ μΈ κ°μμ μΈμκ°μ λ°μμΌν λ μΈμκ°μ μ λ ₯ κ°μλ₯Ό μ ννμ§ μλλ‘ νλ μ μ νμμ λλ€.
func test(number: Int...) -> Int {
var total = 0
for num in number {
total += num
}
return total
}
μμ κ°μ΄ 맀κ°λ³μ νμ λ€μ ... μ°μ°μλ₯Ό μΆκ°νλ©΄ λ©λλ€.
μΈμκ°μ κ°μ μ ν μμ΄ μ λ ₯λ°κ³ , λ°°μ΄λ‘ μ²λ¦¬ν©λλ€.
β 맀κ°λ³μμ κΈ°λ³Έκ°
ν¨μμ 맀κ°λ³μμ κΈ°λ³Έκ°μ μ§μ ν μ μμ΅λλ€.
func test(number: Int, check: Bool = true) {
if check:
print(number * 2)
else:
print(number)
}
test(number: 3)
test(number: 3, check: false)
μμ κ°μ΄ 맀κ°λ³μμ κΈ°λ³Έκ°μ μ§μ ν΄μ£Όκ² λλ©΄ μ΄λ νΈμΆ μμ μλ΅ν μ μκ³ , νμ μμλ§ ν¬ν¨μμΌ νΈμΆν μλ μμ΅λλ€.
β 맀κ°λ³μμ μμ
Swiftμμ ν¨μμ μΈμκ°μ λ³μκ° μλλΌ μμ(let)λ‘ μ μλμ΄ μκΈ° λλ¬Έμ 맀κ°"μμ"λΌλ ννμ΄ λ μ νν©λλ€.
λ°λΌμ μΈμκ°μ κ°μ μλ‘ ν λΉνκ±°λ μμ νλ μ½λλ μ€λ₯λ₯Ό λ°μμν΅λλ€.
ν¨μ λ΄λΆμμ μΈμκ°μ μμ νκΈ° μν΄μλ μλμ κ°μ΄ 맀κ°λ³μμ λμΌν μ΄λ¦μΌλ‘ λ³μλ₯Ό μ μν΄ λ§€κ°λ³μμ κ°μ λμ νκ³ λ³κ²½ν΄μ£Όλ©΄ λ©λλ€.
func test(number: Int) {
var number = number
number += 1
return number
}
numberλΌλ κ°μ μ΄λ¦μΌλ‘ λ³μλ₯Ό μ μνκΈ° λλ¬Έμ μ΄νμ νΈμΆνλ numberλ 맀κ°λ³μ numberκ° μλ μ μν λ³μ numberλ₯Ό κ°λ¦¬ν€κ² λ©λλ€.
β inout 맀κ°λ³μ
var num = 10
func test(number: Int) {
var number = number
number += 1
}
test(number: num)
// 10
μμ κ°μ΄ ν¨μμ μΈμκ°μΌλ‘ λ³μλ₯Ό λκ²¨μ£Όκ³ μ΄λ₯Ό λ³κ²½ν΄λ, λ³μ numμ κ°μ λ³νμ§ μμ΅λλ€. μ΄λ μΈμκ°μ μ λ¬ν λ λ³μ μ체λ₯Ό ν¨μ λ΄λΆλ‘ μ λ¬νλ κ²μ΄ μλλΌ λ³μμ κ°μ 볡μ¬ν λ€μ λ겨주기 λλ¬Έμ λλ€. (κ°μ μν μ λ¬)
λ§μ½ ν¨μ λ΄λΆμμ μΈλΆ λ³μμ κ°μ λ³κ²½νκ³ μΆμ λ inout ν€μλλ₯Ό μ¬μ©ν©λλ€.
func test(number: inout Int) {
number += 1
}
test(number: &num)
// 11
μ μ½λμ²λΌ 맀κ°λ³μ νμ μμ inoutμ λΆμ¬μ£Όλ©΄ κ°μ 볡μ¬ν΄ μ λ¬νλ λμ μΈμκ° μ체λ₯Ό λ΄λΆλ‘ μ λ¬νκ² λ©λλ€.
λ§μΉ CμΈμ΄μ ν¬μΈν°λ₯Ό ν΅ν΄ λ³μμ μ£Όμλ₯Ό λ겨주λ κ²κ³Ό κ°μ΅λλ€.
λμΌνκ² μΈμμ κ° λμ λ³μμ μ£Όμλ₯Ό λ겨주μ΄μΌ νκΈ° λλ¬Έμ νΈμΆ μμ μΈμκ° μμ &λ₯Ό λΆμ¬μ£Όμ΄μΌ ν©λλ€.
(μ°Έμ‘°μ μν μ λ¬)
μμΈμ μΌλ‘ ν΄λμ€λ‘ λ§λ€μ΄μ§ μΈμ€ν΄μ€λ inout ν€μλ μμ΄ μ λ¬ν΄λ μ°Έμ‘°μ μν μ λ¬μ΄ λμ΄ ν¨μ λ΄λΆμμ μμ νλ©΄ μλ³Έ μΈμ€ν΄μ€μλ μν₯μ λ―ΈμΉκ² λ©λλ€.
λν ν¨μ λ΄λΆμμ μμ ν μ μλ μμλ 리ν°λ΄ κ°μ inout ν€μλλ‘ λκ²¨μ€ μ μμ΅λλ€.