Function (ํจ์)
์ ์ ๋ฐ ํธ์ถ (defining and calling functions)
swif์์ ํจ์๋ฅผ ์ ์ธํ ๋๋ func
ํค์๋๋ฅผ ๋ถ์ธ๋ค. ๊ทธ๋ฆฌ๊ณ (person: String)
ํ๋ผ๋ฏธํฐ์ ํ๋ผ๋ฏธํฐ์ ํ์
, ๊ทธ๋ฆฌ๊ณ ๋ฐํํ์-> Stinrg
ํ์ดํ ํํ๋ก ์ ์ํ๋ค.
func greet(person: String) -> String{
let greeting = "Hello, " + person + "!"
return greeting
}
print(greet(person: "JY"))
>>> Hello, JY!
ํจ์ ํ๋ผ๋ฏธํฐ์ ๋ฐํ๊ฐ(Function Parameters and Return Values)
func sayHelloWorld() -> String{
return "hello, world"
}
print(sayHelloWorld())
- ํ๋ผ๋ฏธํฐ๊ฐ ์์ด๋ ๋๋ค.
- ํ๋ผ๋ฏธํฐ๊ฐ ์ฌ๋ฌ๊ฐ๋ ๋๋ค.
- ๋ฐํ ๊ฐ์ด ์์ด๋ ๋๋ค. (์ค์ ๋์์ return Void)
- ๋ฐํ ๊ฐ์ด ์ฌ๋ฌ๊ฐ๋ ๋๋ค.
๋ฐํ๊ฐ์ด ์ฌ๋ฌ๊ฐ์ผ๋
func minMax(array: [Int]) -> (min: Int, max: Int) {
var currentMin = array[0]
var currentMax = array[0]
for value in array[1..<array.count] {
if value < currentMin {
currentMin = value
} else if value > currentMax {
currentMax = value
}
}
return (currentMin, currentMax)
}
let bound = minMax(array: [1,3,4,12,1,3,99,-7])
print(type(of: bound)) //(min: Int, max: Int)
print(bound) // (min: -7, max: 99)
print(bound.min) // 7
print(bound.max) // 99
๋ฐํ๊ฐ์ ๋ํ ์ ๊ทผ๋ bound.min
์ผ๋ก ํ ์ ์๋ค.
๋ฐํ์ด ์ต์
๋์ธ ๊ฒฝ์ฐ
๋น์ฐํ ๋ฐํ๊ฐ์ ์ ๊ทผํ ๋๋ ์ต์
๋์ฒด์ธ์ด๋ unwrapping
์ด ํ์ํ๋ค.
func minMax(array: [Int]) -> (min:Int, max:Int)?{
if array.isEmpty {return nil}
var currentMin = array[0]
var currentMax = array[0]
for value in array[1..<array.count]{
if value < currentMin{
currentMin = value
} else if value > currentMax {
currentMax = value
}
}
return (currentMin, currentMax)
}
if let bounds = minMax(array: [1,3,32,-9,49,9]){
print(bounds.min)
}
ํจ์์ ์ธ์ ๋ผ๋ฒจ ์ง์ ํ๊ธฐ
func greet(person: String, from hometown: String) -> String {
return "Hello \(person)! Glad you could visit from \(hometown)."
}
print(greet(person: "Bill", from: "Cupertino"))
>>> Hello Bill! Glad you could visit from Cupertino.
์ ์ฝ๋์์๋ ํจ์ ํธ์ถ์์๋ from
์ผ๋ก ๋ฐ์์ค๊ณ , ํจ์ ๋ด๋ถ์์๋ homtown
์ผ๋ก ์ฌ์ฉํ๋ค.
์ธ์ ์๋ต
ํ๋ผ๋ฏธํฐ ์์ ์ธ๋๋ฐ(_
)๋ฅผ ๋ถ์ด๋ฉด ํธ์ถ์์ ์ธ์๊ฐ์ ์๋ตํ ์ ์๋ค.
func someFunction(_ firstParameterName: String, secondparameterName: String){
}
someFunction("์ธ์ ๋ผ๋ฒจ ์์จ๋๋จ", secondparameterName: "secondName")
๊ธฐ๋ณธ ํ๋ผ๋ฏธํฐ ๊ฐ ์ค์
ํ๋ผ๋ฏธํฐ์ ๊ธฐ๋ณธ๊ฐ์ ์ค์ ํ๋ฉด , ํจ์ ํธ์ถ์์ ์ธ์๊ฐ์ ์๋ตํ ์ ์๋ค. ๋ฌผ๋ก ์๋ต๋๋ฉด ํ๋ผ๋ฏธํฐ์ ๊ธฐ๋ณธ๊ฐ์ด ๋ค์ด๊ฐ๊ฒ ๋๋ค.
func someFunction(parameterWithoutDefault: Int, parameterWithDefault: Int = 12) {
// ํจ์ ํธ์ถ์ ๋๋ฒ์งธ ์ธ์๋ฅผ ์๋ตํ๋ฉด ํจ์์์์
// parameterWithDefault๊ฐ์ 12๊ฐ ๊ธฐ๋ณธ ๊ฐ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
}
someFunction(parameterWithoutDefault: 3, parameterWithDefault: 6) // parameterWithDefault๋ 6
someFunction(parameterWithoutDefault: 4) // parameterWithDefault๋ 12
๊ฐ๋ณ์ธ์(Variadic Parameter)
...
๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด, ์ ์๋ ํ๋ผ๋ฏธํฐ๋ณด๋ค ๋ ๋ง์ ์์ ์ธ์๊ฐ์ ๋ฐ์์ฌ ์ ์๋ค.
func average(_ numbers: Int...) -> Double{
var sum : Int = 0
for number in numbers{
sum += number
}
return Double(sum) / Double(numbers.count)
}
print(average(10,20,25,28,3))
>>> 17.2