Swift03 - 함수
in Swift
함수
- -> 로 결과 타입 반환
// Bool 반환
func areYouOK() -> Bool {
return true
}
// String
func favorite() -> String{
return "Coffee"
}
- 다수의 값 반환 : 튜플 사용
func random3() -> (Int, Int, Int){
let r1 = Int(arc4random() % 10)
let r2 = Int(arc4random() % 10)
let r3 = Int(arc4random() % 10)
return (r1, r2, r3)
}
// 다음과 같이 튜플로 얻어서 사용
var (num1, num2, num3) = random3()
println("Random numbers : \(num1), \(num2), \(num3)")
var nums = random3()
println("Random numbers : \(nums.0), \(nums.1), \(nums.2)")
파라미터
- 내부 파라미터
func greeting(person : String, emotion : String){
println("person : \(person), emotion : \(emotion)")
}
greeting("zzzz", "kkk")
- 외부 파라미터 이름
func greeting(whom person : String){
println("\(person)")
}
greeting(whom : "My Friend")
func externalParamFunc(whom person : String, with emotion : String){
println("Hello " + person + "with " + emotion)
}
// 외부 파라미터 있는 함수를 호출할 때 해당 파라미터 호출
externalParamFunc(whom : "myfiend", with :"smile")
- 내부 파라미터 이름을 외부 파라미터 이름으로 : # 사용
func greeting(# person : String, # emotion : String){
println("person : \(person), emotion : \(emotion)")
}
greeting(person : "aaaa", emotion : "bbb")
- 파라미터 기본값
func externalParamFunc2(whom person : String, emotion : String = "Happy"){
println("Hello " + person + "with " + emotion)
}
externalParamFunc2(whom : "myfiend")
혼동 주의
func greeting(whom person : String, emotion : String = "Happy"){} func greeting(whom persoon : String){} greeting(whom : "World") // 어떤 함수 호출?
- 외부 파라미터 이름
- 자동으로 내부 파라미터 이름
- 수동으로 외부파라미터 설정하기
- _ (언더스코어) 사용
다수의 파라미터
- 하나의 파라미터로 다수의 값 설정
- … 이용해서 선언
- 함수의 파라미터 중 마지막에 위치
func addAll(values : Int...) -> Int {
if values.count == 0 {
return 0
}
else {
var result = 0
for v in values {
result += v
}
return result
}
}
addAll(1,2,3)
파라미터 변수와 상수
- 평소에는 let으로 간주
- var 키워드로 함수 안에서 변수로 사용 가능
- 값이 복사가 됨
func countTo(var value : Int) -> Int {
var result = 0
while value > 0 {
result += value
value--
}
return result
}
var count = 10
countTo(count) // 55
count //10
inout 파라미터(레퍼런스)
- 함수 내에서 변경한 내용을 함수 외부에 반영되도록 하기 위해
- c에서의 레퍼런스
func swapTwoValue(inout var1 : Int, inout var2 : Int){
var temp = var1
var1 = var2
var2 = temp
}
var value1 = 10
var value2 = 20
swapTwoValue(&value1, &value2)
value1 // 20
value2 // 10
옵셔널 반환 타입과 파라미터
- 파라미터 : 옵셔널 가능
- 반환값 : 옵셔널 가능
func toInt() -> Int?
- 파라미터로 전달된 값을 숫자로 변경할 수 엇으면 실패의 의마로 nil을 반환
- nil 반환이 가능하므로 반환 타입은 옵셔널
- ? 이나 ! 사용
- 아래는 if-let을 이용한 코드
func convertInt(str : String) -> Int? {
if let result = str.toInt() {
return result
}
else {
return nilHandleErr
}
}
if let num = convertInt("abc"){
num * 3
}
else {
println("숫자 아님")
}
let nu = convertInt("123")
println(nu * 10)
함수 다른 예제
func adds(values : Int...) -> Int {
var count = values[0]
var sum = 0
for var i = 0; i < count ; i++ {
sum += values[i]
}
return sum
}
adds(1,1, 2,3) //1
adds(3,1,2,3,4) //6
adds(4,1,2,3,4,5,6)//10
func add(var1 : Int, var2 : Int, inout ret : Int){
ret = var1 + var2
}
var ret = 0
add(1,2, &ret)
println(ret)