[Contents]
- ν¨μ Overloading
- μ€μ²© ν¨μ
- μ’ λ£λμ§ μλ ν¨μ (Nonreturning function)
- λ°ν κ°μ 무μν μ μλ ν¨μ ( @discardableResult μμ± )
- μμΌλμΉ΄λ μλ³μ (Omitting Argumetn Labels)
- κ°λ³ 맀κ°λ³μ (Variadic Parameters)
- ν¨μ νμ (Function Types)
π ν¨μ Overloading
λ¨Όμ μ€λ²λ‘λ©μ΄λ κ°μ μ΄λ¦μ ν¨μλ₯Ό μ¬λ¬ κ° μ μνκ³ λ§€κ°λ³μλ₯Ό λ€λ₯΄κ² νμ¬ λ€μν μ νμ νΈμΆμ μλ΅ κ°λ₯νκ² νλ€.
맀κ°λ³μμ νμ μ΄ λ€λ₯΄κ±°λ 맀κ°λ³μμ κ°μκ° λ€λ₯΄λ€λ©΄ μ΄λ¦μ΄ κ°μ ν¨μλ₯Ό μ¬λ¬ κ° λ§λ€ μ μλ€.
func hello(name: Int){ }
func hello(name: String){ }
func hello(name: String, age: Int){ }
λν, μ λ¬μΈμ λ μ΄λΈλ§ λ€λ₯΄κ² μ¨μ£ΌλλΌλ ν¨μ μ€λ³΅ μ μλ‘ λμ κ°λ₯νλ€.
func hello(to name: String, _ age: Int){
print("hello \(name), your age is \(age)")
}
func hello(to name: String, repeatCounting age: Int){
print("hello \(name), your age is \(age)")
}
hello(to: "yeon", 2)
hello(to: "yeon", repeatCounting: 3)
π μ€μ²© ν¨μ
- ν¨μ μμμ ν¨μ ꡬν λ° μ¬μ© κ°λ₯
- μ μ ν¨μκ° λ§μ νλ‘κ·Έλ¨μμ μ€μ²© ν¨μλ₯Ό μ¬μ©νμ¬ μ¬μ©λ²μλ₯Ό μ’ λ λͺ ννκ² νν κ°λ₯
typealias UpDownFunc = (Int) -> Int // νμ
λ³μΉ
func funcForMove(shouldGoUP: Bool) -> UpDownFunc { // λ°ν νμ
μ΄ ν¨μ
func goUp(currentFloor: Int) -> Int {
return currentFloor + 1
}
func goDown(currentFloor: Int) -> Int {
return currentFloor - 1
}
return shouldGoUP ? goUp : goDown
}
var currentFloor: Int = 10
var targetFloor: Int = 6
let moveToTarget: UpDownFunc = funcForMove(shouldGoUP: currentFloor<targetFloor)
while currentFloor != targetFloor {
print("νμ¬ \(currentFloor) μΈ΅...")
currentFloor = moveToTarget(currentFloor)
}
print("λ΅! \(currentFloor)μΈ΅ λμ°©.")
//νμ¬ 10 μΈ΅...
//νμ¬ 9 μΈ΅...
//νμ¬ 8 μΈ΅...
//νμ¬ 7 μΈ΅...
//λ΅! 6μΈ΅ λμ°©.
π μ’ λ£λμ§ μλ ν¨μ (Nonreturning function)
- μ’ λ£λμ§ μλλ€λ κ²μ return λμ§ μκ³ λΉμ μμ μΌλ‘ λλλ κ²μ μλ―Έ.
- μ¦, μ’ λ£λμ§ μλ ν¨μλ μ€λ₯λ₯Ό λμ§κ³ μ€λν μμ€ν μ€λ₯λ₯Ό λ³΄κ³ ν ν νλ‘μΈμ€λ₯Ό μ’ λ£νκΈ° μν΄μ μ겨λ¨
- λΉ λ°ν ν¨μλ μ΄λμλ νΈμΆμ΄ κ°λ₯νκ³ λ°ν νμ μ Neverλ‘ λͺ μνμ¬ μ μ
//μ’
λ£λμ§ μλ ν¨μ > Never νμ
κ° λ°ν
func myHairFallsOut() -> Never {
fatalError("Something very, very bad happened")
}
func goodMorning(isAllIsWell: Bool) -> Void {
guard isAllIsWell else {
print("OMG!")
myHairFallsOut()
}
print("All is well!")
}
goodMorning(isAllIsWell: true) //All is well!
goodMorning(isAllIsWell: false) //OMG! νλ‘μΈμ€ μ’
λ£ ν μλ¬ λ°μ
[μΆλ ₯ νλ©΄]
π λ°ν κ°μ 무μν μ μλ ν¨μ ( @discardableResult μμ± )
- @discardableResult : Swiftμμ λ°μνλ Warningμ 무μνλ μμ±
- μλμ μΌλ‘ νλ‘κ·Έλλ¨Έκ° λ°ν κ°μ νμνμ§ μμ λ μ»΄νμΌλ¬μκ² λ―Έλ¦¬ μλ €μ€μ κ²½κ³ λ₯Ό λ°μ§ μκ²λ ν¨μλ₯Ό μμ± κ°λ₯
- ν¨μ μ μΈ μμ @discardableResult μμ±μ μ μ΄ μ μΈ
[warningμ΄ λ°μνλ μμ]
- ν¨μμ λ¦¬ν΄ κ°μ μ¬μ©νμ§ μλ κ²½μ° Xcode μ»΄νμΌλ¬κ° Warningμ λ±λλ€.
[@discardableResult μ μ©νμ¬ warning μ κ±°]
- λ°ν κ°μ μ¬μ©νμ§ μμ μ μλ€κ³ 미리 μλ ΈκΈ° λλ¬Έμ λ°ν κ°μ μ¬μ©νμ§ μμλ μ»΄νμΌλ¬κ° κ²½κ³ νμ§ μλλ€.
π μμΌλμΉ΄λ μλ³μ (Omitting Argumetn Labels)
μμΌλμΉ΄λ μλ³μλ₯Ό 곡λΆνκΈ° μ΄μ μ, swift ν¨μμ μ λ¬μΈμ λ μ΄λΈ(Argument label) κ°λ μ μ‘μ보μ.
Swift ν¨μμμλ κ°λ μ±μ μν΄μ ν¨μλ₯Ό νΈμΆν λ μ¬μ©νλ νλΌλ―Έν°(μΈλΆνλΌλ―Έν°)μ μ΄λ¦κ³Ό ν¨μ μμμ ꡬνλ νλΌλ―Έν°(λ΄λΆνλΌλ―Έν°)μ μ΄λ¦μ ꡬλΆκ°λ₯νλ€. μ΄λ μ΄ μΈλΆ νλΌλ―Έν°λ₯Ό μ λ¬μΈμ λ μ΄λΈμ΄λΌ νλ€.
μ¦, μΈλΆνλΌλ―Έν° = μ λ¬ μΈμ λ μ΄λΈ,
λ΄λΆνλΌλ―Έν° = 맀κ°λ³μ μ΄λ¦
μ΄λ, μΈλΆνλΌλ―Έν°λ λ΄λΆμμ μ¬μ© λΆκ°νκ³ λ΄λΆνλΌλ―Έν°λ νΈμΆν λ μ¬μ©ν μ μλ€.
//func ν¨μλͺ
(μΈλΆνλΌλ―Έν° λ΄λΆνλΌλ―Έν°: νμ
){}
//func ν¨μλͺ
(μ λ¬μΈμλ μ΄λΈ 맀κ°λ³μμ΄λ¦: νμ
){}
func sum(inputNumber number1: Int, number2: Int) -> Int{
//inputNumber = 1 // inputNumberμ μΈλΆνλΌλ―Έν°λ‘ λ΄λΆμμ μ κ·Ό μλΌ! νΈμΆν λλ§ κ°λ₯
return number1 * number2// λ΄λΆ νλΌλ―Έν° μ¬μ©, λ΄λΆμμ λ‘μ§μΌλ‘ μ€ν λ λ
}
var res = sum(inputNumber: 1, number2: 2) // νΈμΆμ μΈλΆ νλΌλ―Έν° inputNumberμ κ° μ
λ ₯
μ΄λ¬ν μ λ¬ μΈμ λ μ΄λΈμ μ¬μ©νκ³ μΆμ§ μλ€λ©΄ μμΌλμΉ΄λ μλ³μλ₯Ό μ¬μ©νλ©΄ λλ€.
ν¨μμ μΈ μ μΈλΆ 맀κ°λ³μ μ리μ _(μΈλλ°)λ₯Ό μ¬μ©νμ¬ μΈμ λ μ΄λΈ μμ΄ ν¨μλ₯Ό νΈμΆν μ μλ€.
μ¦, μΈλΆνλΌλ―Έν° μ¬μ©μ μλ΅νκ² λ€λ μλ―Έμ΄λ€.
sumν¨μμ κ°μ νλΌλ―Έν°κ° μ μΆκ°λ₯ν ν¨μμμ μ¬μ©νλ©΄ μ’λ€!
func sum(_ a : Int , _ b : Int) -> Int{
return a+b
}
// νλΌλ―Έν° μμ΄ κ°λ§ μ
λ ₯νμ¬ ν¨μ νΈμΆ
sum(1, 2)
// >> 3
π κ°λ³ 맀κ°λ³μ (Variadic Parameters)
Swift ν¨μμμλ κ°λ³μ μΈ κ°μμ νλΌλ―Έν°λ₯Ό μ λ ₯λ°μ μ μμ΄ μ λ¬ λ°μ κ°μ κ°μλ₯Ό μκΈ° μ΄λ €μΈ λ μ¬μ©ν μ μλ€.
μλμ κ°μ΄ νλΌλ―Έν° νμ κ³Ό ν¨κ» "...”μ μ λ ₯μ κ°λ³μΈμλ‘ μΈμλμ΄ κ°μλ₯Ό μ ννμ§ μκ³ μΈμκ°μ μ λ ₯λ°κ³ , μ λ ₯λ°μ μΈμκ°μ λ°°μ΄μ μ μ₯νλ€. (κ°λ³ 맀κ°λ³μλ ν¨μλΉ νλλ§ κ°μ§ μ μλ€.)
//func ν¨μμ΄λ¦(맀κ°λ³μ1μ΄λ¦: 맀κ°λ³μ1νμ
, μ λ¬μΈμ λ μ΄λΈ 맀κ°λ³μ2μ΄λ¦: 맀κ°λ³μ2νμ
...) -> λ°ννμ
{
// /* ν¨μ ꡬνλΆ */
// return
//}
// μ) String νμ
μ friendsλ‘ λΆλ¦¬λ λ°°μ΄λ‘ λ§λ€μ΄μ§
func sayHelloToFriends(me: String, friends: String...) -> String {
return "Hello \(friends)! I'm \(me)!"
}
sayHelloToFriends(me: "yeon", friends: "hana", "eric", "wing")
// >> Hello ["hana", "eric", "wing"]! I'm yeon!
// μ) array > for in μΌλ‘ λνκΈ°, numbers >> Intν array type
func sumAll(numbers: Int...) -> Int{
var total = 0
for number in numbers{
total += number
}
return total
}
// νΈμΆμ 맀κ°λ³μ κ°λ€μ μΌνλ‘ κ΅¬λΆνλ€.
sumAll(numbers: 1,2,3,4)
// >> 10
π ν¨μ νμ (Function Types)
μ€μννΈλ ν¨μν νλ‘κ·Έλλ° ν¨λ¬λ€μμ ν¬ν¨νλ λ€μ€ ν¨λ¬λ€μ μΈμ΄λ‘ μ€μννΈμ ν¨μλ μΌκΈκ°μ²΄μ΄λ―λ‘ λ³μ, μμ λ±μ μ μ₯μ΄ κ°λ₯νκ³ λ§€κ°λ³μλ₯Ό ν΅ν΄ μ λ¬ν μλ μλ€.
//(맀κ°λ³μ1νμ
, 맀κ°λ³μ2νμ
...) -> λ°ννμ
//ν¨μ νμ
μ μΈ
typealias TypeFuction = (Int, Int) -> Int
func add(a: Int, b: Int) -> Int{
return a+b
}
func multiply(a: Int, b: Int) -> Int{
return a*b
}
var AddResult: TypeFuction = add
AddResult(1, 2)
var MultiplyResult: TypeFuction = multiply
MultiplyResult(1, 2)
func diffAdd(a: (Int, Int) -> Int) -> Int {
return 0
}
diffAdd(a: AddResult)
'π iOS > Swift' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift] κ³ μ°¨ν¨μ - map, filter, reduce (0) | 2023.04.10 |
---|---|
[Swift] μ΅μ λ(Optional) ? μ΅μ λ λ°μΈλ©νκΈ° + String λΉκ°, μ΅μ λ κ΅¬λΆ (0) | 2023.04.05 |
[Swift] ν¨μ(Function) - κΈ°λ³Έ (0) | 2022.03.05 |
[Swift] μ€μννΈ λ°λ³΅λ¬Έ(Loops, Repetitive Statement) (0) | 2022.03.02 |
[Swift] μ€μννΈ μ‘°κ±΄λ¬Έ(Conditional Statements) (0) | 2022.02.23 |