iOS 앱개발 4주차

2024. 9. 26. 16:50iOS앱개발

swift에서는 parameter 와 argumemt를 확실하게 구분해야 하기 때문에 두 단어의 차이점을 알아둬야 한다

func sayHello() {//-> Void
    print("hi");
}

sayHello()

swift 에서 함수를 정의할때에는 func 선언자를 통해서 선언이 가능하며 리턴값은 () -> 뒤에 작성한다

리턴값이 void일 경우에는 생략이 가능하다

또한 함수 정의 이전에 함수를 호출해도 에러가 나지 않는다.

swift에서 argument labels 를 작성하지 않아서 에러가 나는 모습이다

add(x: 10, y: 20);

이런식으로 labels를 달아줘야 에러가 나지 않는다

x , y : argument labels

10, 20 : argument

함수의 자료형

//함수 add 의 자료형
print(type(of: add)) //(Int, Int) -> Int

(자료형, 자료형) -> 리턴형 

형식으로 출력된다  매개변수가 없고 리턴형이 없는 함수의 경우에는 () -> () 의 형식으로 출력된다

함수의 이름

func add(_ x : Int ,with  y : Int) -> Int  {
    print(#function)//함수의 이름 add(_:with:)
    return(x+y)
}

swift에서는 함수 이름이  함수명(외부매개변수명:외부매개변수명:...) 이러한 형식으로 출력된다 따라서 외부매개변수명이 둘 다 없는 경우에는

add(_:_:)

이런 식으로 출력된다

그렇다면 외부매개변수명을 주지 않는 경우에는 어떻게 될까?

func add(x : Int ,y : Int) -> Int  {
    print(#function)
    return(x+y)
}

이런 경우에는 자동으로 내부 매개변수명(파라미터) 값이 외부매개변수명으로 할당되기 떄문에

add(x:y:)

위와같이 출력된다.

이와같이 Swift에서의 함수 이름은 단순히 add가 아닌 add(first:second:)와 같이 외부 매개변수명(argument labes) 와 : (콜론) 을 같이 써주어야 한다 

guard 문

var x = 1
while true {
    
    guard x < 5 else { break }//조건(x<5)이 거짓일 때 실행(break)
    //조건 다음에는 반드시 else를 써야한다
    //    if x > 4 { //if 문은 조건이 참일때 중괄호 안에있는 코드가 실행된다
    //        break
    //    }
    print(x) //1 2 3 4, 조건(x<5)이 참일 때 실행
    x = x + 1
}

guard문은 보통 옵셔널을 바인딩(해제) 하기위해 많이 사용한다 이전에는 if문을 통해 옵셔널을 안전하게 바인딩했지만 보통은 guard문을 사용한다

func multiplyByTen(value: Int?) {
  guard let number = value else {//조건식이 거짓(nil)일 때 else 블록 실행
     print("nil")
     return
  }
  print(number*10) //조건식이 참일 때 실행, 주의 : number를 guard문 밖인 여기서도 사용 가능
}
multiplyByTen(value: 3)   //30
multiplyByTen(value: nil)
multiplyByTen(value: 10)

 

argument로 3을 넣으면 함수 내부에서는 optional(3) 이기 때문에 number 에 3이 할당되고 {} 안에 코드가 실행되지 않는다

또한 특이하게 guard let 문은 블럭스코프 밖에서도 사용이 가능하기 때문에 밑에서도 사용이 가능하다

func multiplyByTen(value: Int?) {
    //  guard let number = value else {//조건식이 거짓(nil)일 때 else 블록 실행
    //     print("nil")
    //     return
    //  }
    if let number = value {
        print(number * 10)
    }else{
        print("nil")
    }
}
multiplyByTen(value: 3)   //30
multiplyByTen(value: nil)
multiplyByTen(value: 10)

지난번과 같이 if ~ let 문으로도 가능하지만 guard 문을 사용할 경우에는 param값으로 nil 값이 들어올 경우 if문과 다르게 추가 로직을 거치지 않고도 바로 return 시킬 수 있기 때문에 (조기 출구 전략) 더욱 효과적으로 사용이 가능하다.

Default Parameter 

 

가변 매개변수

func displayStrings(strings: String...)
{
  for string in strings {
    print(string)
  }
}
displayStrings(strings: "일", "이", "삼", "사")
displayStrings(strings: "one", "two")

 

input 매개변수

var myValue = 10
func doubleValue (value: inout Int) -> Int {
  value += value
  return(value)
}
print(myValue)
print(doubleValue(value : &myValue))  //출력 값? 레포트
print(myValue)

기본적으로 swift 는 매개변수를 상수로 취급하기 때문에 함수 내에서 매개변수를 변경하려면 주소값을 넘겨주어야 한다 c언어와 같이 

&를 통해서 myValue의 주소값을 넘기고 매개변수를 inout parameter로 받은 후 변경하면 된다 

실제 myValue의 주소에 있는 값을 변경했기 때문에 3번째 print 문에서는 myValue의 값이 20이 된다

 

 

 

 

 

 

 

 

 

출저: 스마일한의 스위프트 기초

'iOS앱개발' 카테고리의 다른 글

iOS 앱개발 6주차  (3) 2024.10.10
iOS 앱개발 5주차  (0) 2024.10.06
iOS 앱개발 3주차  (1) 2024.09.19
iOS앱개발 2주차  (0) 2024.09.12
iOS앱 개발 1주차  (1) 2024.09.05