ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Swift #7 - 함수
    Swift의 온도 2021. 1. 12. 03:02

     

    1. 함수 정의와 사용

     

    - 애플리케이션의 동작

    #동작의 기본 단위 : 함수

     

    - 함수 작성

    #func 키워드로 정의

    #함수의 리턴 타입

    #함수 이름

    #함수 파라피터

     

    #함수 정의

    *파라미터, 리턴 값이 없는 함수
     
    func greeting() {
        print("Hello Swift")
    }
     
    *사용
    greeting()
    cs

     

    #함수의 실행 결과

    * ->로 결과 타입 작성
    *반환 타입이 없으면 (Void- 생략 가능
     
    func greeting() -> Void {
    }
     
    *반환 타입과 같은 타입의 값 반환
     
    func areYouOK -> Bool {
        return true
    }
    func favoriteDrink() -> String {
        return "Coffee"
    }
    cs

     

    - 함수 반환값

    #다수의 값 반환 : 튜플

    *튜플 반환 함수 정의
     
    func random3() -> (IntIntInt) {
        let r1 = Int(arc4random() % 10)
        let r2 = Int(arc4random() % 10)
        let r3 = Int(arc4random() % 10)
     
        return (r1, r2, r3)
    }
     
    *사용
     
    var (num1, num2, num3) = random3()
    print("Random1 : \(num1) Random2 : \(num2) Random3 : \(num3)")
    cs

     

    2. 함수 파라미터

     

    - 함수 파라미터

    #파라미터가 있는 함수

    *파라미터 1개
     
    func greeting(person:String) {
        print("Hello" + person)
    }
     
    *파라미터 2개
     
    func greeting(person: String, emotion: String) {
        print("Hello" + person + "with" + emotion)
    }
    cs

     

    -  파라미터 이름

    #내부 파라미터 이름

    *함수 내부에서 접근, 사용
    *함수 외부에서 접근/사용 불가
     
    func greeting(person: String) {
        print("Hello" + person)
    }
    cs

     

    #외부 파라미터 이름

    *함수 외부(함수 호출)에서 사용
    *함수 내부에서 접근 불가
    *내부 파라미터 이름으로 자동 적용
     
    func greeting(person: String) {
        print("Hello" + person)
    }
    greeting(person:"My Friend")
     
    *파라미터가 2개인 함수 호출
     
    greeting(person:"My Friend", emotion:"Smile")
    cs

     

    *수동으로 설정하기 - 파라미터 앞에 선언
    *별도로 설정하지 않으면 - 내부 파라미터 이름과 동일
     
    func greeting(who person : String) {
        print("Hello" + person)
    }
    greeting(who: "Swift")
     
    func greeting(person:Stringwith emotion: String) {
        print("Hello" + person + "with" + emotion)
    }
    greeting(person: "My Friend, with: "Hug")
    cs

     

    - 외부 파라미터 이름 사용 생략

    *_기호 사용
     
    func greeting(_person: String) {
        print("Hello" + person)
    }
    greeting("Friend")
     
    func greeting(person: String, _emotion: String) {
        print("Hello" + person + "with" + emotion)
    }
    greeting(person: "Swift""Passion")
    cs

     

    - 오버로딩

    *같은 함수 이름, 다른 파라미터 타입
     
    func sayHello(msg : String) {
        print("sayHello(msg:)")
    }
     
    *다른 외부 파라미터 이름
     
    func sayHello(_msg : String) {
        print("sayHello(_:)")
    }
     
    *다른 파라미터 타입
     
    func sayHello(_times : Int) {
        print("sayHello(_:)")
    }
    cs

     

    - 파라미터 기본값

    * =기호와 함께 기본값 설정
    * 호출 시 생략 가능
     
    func greeting(person : String = "Friend") {
        print("Hello \(person)")
    }
     
    greeting(person: "Mom")
    greeting()
     
    * 혼동 주의
     
    greeting(whom: "World")
     
    * 어느 메소드가 실행되는가?
     
    func greeting(whom person : String) {
        print("Hello" + peroson)
    }
    func greeting(whom person : String. emotion : String = "Happy") {
        print("Hello" + person + "with" + emotion)
    }
    cs

     

    - 가변 길이 파라미터

    *개수가 정해지지 않은 다수의 파라미터
    *타입에 '...' 사용
    *함수 파라미터에 하나만 사용 가능
    *함수 내부에서 배열로 사용
     
    func addAll(_values : Int-> Int {
        print(values.count)
        for v in values {
            print(v)
         }
    }
     
    *호출
     
    addAll(123)
    cs

     

    - inout 파라미터

    #파라미터 상수

    *파라미터 : 함수 내부에서는 상수로 사용
    *파라미터 변경 시도 시 에러
     
    func tryParameterChange(_arg : Int) {
        arg = arg +1 //Error
    }
    cs

     

    #파라미터 값 변경하기 : inout 선언

    *파라미터 타입 앞에 inout 작성
    *두 값을 바꾸기(swap) 예
     
    func swapTwoValue(_ arg1 : inout Int, _ arg2 : inout Int) {
        let temp = arg1
        arg1 = arg2
        arg2 = temp
    }
     
    *호출 : &사용
     
    var value1 = 1
    var value2 = 2
    swapTwoValue(&value1, &value2)
    cs

     

    3. 함수와 옵셔널

     

    - 옵셔널

    *함수 파라미터 옵셔널
    *반환 타입 옵셔널
    *옵셔널로 선언해야 nil 사용 가능
     
    func sayHello(who : String) {
        print("Hello \(who)")
    }
     
    sayHello(who: nil) // Error
    cs

     

    -  옵셔널 반환 타입

    #동작 결과로 옵셔널 타입의 값 반환

    func nilReturnFunction() -> Int? {
        return nil
    }
     
    *ret의 타입은?
     
    let ret = nilReturnFunction()
     
    *옵셔널 바인딩과 사용
     
    if let ret = nilReturnFunction() {
        print("실행 결과 : \(ret)")
    }
    cs

     

    - 옵셔널 타입의 파라미터

    *호출 시 : 파라미터에 nil 대입 가능
     
    let ret2 = append(str: "Welcome", num: nil)
     
    *함수 구현 시 : nil 검사 필요
     
    func append(str: String, num val: Int?) -> String {
        guard let str2 = val else {
            return str
        }
        return str + String(str2)
    }
    cs

     

    #강제 언래핑 사용

    *nil반환 함수 호출 시
     
    func nilReturnFunction() -> Int? {
        return nil
    }
    let ret : Bool = nilReturnFunction()!
    cs

     

    - 함수 내 함수

    #함수 내부에 함수 정의

    *함수 외부에서 사용 불가
     
    func outerFunc() {
        func innerFunc() {
            print("Inner Function works")
    }
     
        print("Outer Function works")
        innerFunc()
    }
     
    outerFunc()
    innerFunc() // 외부에서 호출 불가
    cs

     

    'Swift의 온도' 카테고리의 다른 글

    Swift #9 - 객체 초기화  (0) 2021.01.14
    Swift #8 - 클래스  (0) 2021.01.13
    Swift #6 - nil과 옵셔널  (0) 2021.01.08
    Swift #5 - 제어문  (0) 2021.01.07
    Swift #4 - 다수의 데이터 다루기  (0) 2021.01.06

    댓글