관리 메뉴

java,javascript,android,php,sql,공부용,메모용

스위프트5 함수, 메서드, 매개변수, 지역매개변수, 외부매개변수 -2 / Xcode SwiftUI Playground 공부 본문

모바일/SwiftUI ios 공부

스위프트5 함수, 메서드, 매개변수, 지역매개변수, 외부매개변수 -2 / Xcode SwiftUI Playground 공부

yy_dd2 2021. 9. 23. 01:04
반응형

https://tog-code.tistory.com/84

 

스위프트5 함수, 메서드, 매개변수, 지역매개변수, 외부매개변수 -1 / Xcode SwiftUI Playground 공부

Xcode SwiftUI Playground  공부 스위프트5의 함수, 메서드, 클로저 개요 함수 함수 : 특정 작업 수행을 위해 호출할 수 있게 이름 붙여진 코드의 블록 - 작업 수행을 위해 데이터 제공, 작업 결과 호출

tog-code.tistory.com

여러 결과값 반환하기

- 튜플로 래핑 후 여러 개의 결과값을 함수가 반환한다.

// 이 함수는 길이에 대해 인치 단위의 측정값을 매개변수로 받는다.

// 매개변수로 받은 값을 야드, 센티미터, 미터로 변환하고

// 값을 하나의 튜플 인스턴스에 넣어 반환한다.

func sizeConverter(_ length: Float) -> (yards: Float, centimeters: Float, meters: Float) {
    let yaeds = length * 0.0277778
    let centimeters = length * 2.54
    let meters = length * 0.0254
    
    return (yaeds, centimeters, meters)
}

만든 함수의 사용법은

// 만든 함수 사용법
let lengthTuple = sizeConverter(20)
print(lengthTuple.yards)
print(lengthTuple.centimeters)
print(lengthTuple.meters)

 

 

가변개수 매개변수

// 앱의 코드에서 함수가 호출되면 받게 될 매개변수가 몇개인지 알 수 없다.

// 스위프트는 가변개수 매개변수(variadic parameter)를 사용해 이런 경우를 처리한다

// 함수가 지정된 데이터 타입의 매개변수 0개 또는 그 이상을 받는다는 것을 의미하는 점 세 개 (...)를 이용하여

// 가변개수 매개변수를 선언한다.

// 함수 내에서 매개변수는 배열 개체의 형태로 사용할 수 있다.

// 문자열들의 값들을 매개변수로 받아 콘솔 패널에 출력하기

func displayStrings(_ strings : String...){
    for string in strings {
        print(string)
    }
}

displayStrings("one","tow","three","four")

 

변수인 매개변수

// 함수가 받는 모든 매개변수는 상수이다 상수는 코드 내에서 값이 변경되는 것을 막는다

// 만약 함수 내에 매개변수 값을 변경하고 싶다면 매개변수의 섀도 복사본(shadow copy)을 반드시 생성 해야한다.

 

// 이 함수는 함수의 인치 단위의 길이와 너비를 매개변수로 전달 받아서

// 두 값에 대한 섀도 변수를 생성하고 각 값을 센티미터로 변환 후 면적을 계산해 반환

func calcuateArea (length : Float, width: Float) -> Float {
    
    var length = length
    var width = width
    
    length = length * 2.54
    width = width * 2.54
    return length * width
}

print(calcuateArea(length: 10, width: 20   ))

 

 

입출력 매개변수로 작업하기

// 섀도우 복사본을 생성해서 사용하면 복사본이기 때문에 기본적인 원본 변수에 반영되지 않는다

var myValue = 10
func doubleValue (_ value : Int) -> Int {
    var value = value
    value += value
    return value
}

print("Before function call myValue = \(myValue)")
print("doubleValue call return = \(doubleValue(myValue))")
print("After function call myValue = \(myValue)")

// 위 함수는 원본 myValue를 변경하지 않았다.

 

// 함수가 값을 반환한 뒤에도 매개변수에 대한 변경을 유지하려면

// 함수 선언부 내에서 매개변수를 입출력 매개변수(in-out parameter)로 선언해야한다.

// 함수에 inout을 추가하고 섀도 복사본을 삭제한다.

var myValue2 = 10
func doubleValue2(_ value : inout Int) -> Int {
    // var value = value // 섀도 복사본 삭제
    value += value
    return value
}

 

// 그리고 함수 사용시에 입출력 배개변수 앞에 &을 붙여야 한다.

print("doubleValue call returned \(doubleValue2(&myValue2))")

 

 

// 매개변수인 함수

// 스위프트의 기능으로 함수가 데이터 타입처럼 취급될 수 있다.

// 선언부처럼 함수를 상수나 변수에 할당하는 것도 가능

func inchesToFeet (_ inches:Float) -> Float {
    return inches * 0.0833333
}

let toFeet = inchesToFeet

 

// inchesToFeet 함수를 선언하고 toFeet이라는 상수에 할당한다

// 이렇게 할당하면 원래 함수 이름이 아닌 상수 이름을 이용한 함수를 호출 할 수 있다.

let result = toFeet(100)
print(result)

// 상수나 변수에 할당된 함수는 여러 데이터 타입의 기능을 가질 수 있으니

// 이렇게 함수를 상수나 변수에 할당하는게 가능한 것이 많이 사용될 것

 

// 함수와 함수 연결

// 함수의 데이터 타입 : 받게 될 매개변수의 데이터 타입 + 반환될 데이터 타입 조합으로 결정됨

// 앞의 함수는 부동소수점 매개변수를 받고 부동소수점 결과를 반환하기 때문에 함수의 데이터 타입은 다음과 같다
(Float) -> Float
// Int와 Double을 매개변수로 받고 String 결과를 반환하는 함수는 다음의 데이터 타입을 갖는다
(Int, Double) -> String

 

함수로 함수를 매개변수로 받기

// 어떤 함수가 다른 함수를 매개변수로 받기 위해서는 매개변수로 받게 될 함수의 데이터 타입을 선언하면 된다.
// 두 개의 단위 변환 함수를 상수에 할당한 코드다
func inchesToFeet2 (_ inches: Float) -> Float{
    return inches * 0.0833333
}

func inchesToYards2 (_ inches: Float)->Float{
    return inches * 0.0277778
}

let toFeet2 = inchesToFeet2
let toYards2 = inchesToYards2

 

// 이 코드는 단위를 변환하고 콘솔 패널에 결과를 출력하는 함수가 필요함

// 다시 만들 함수는 종류별 측정 단위를 변환할 수 있게 만들어 보편적인 함수로 만든다

 

// 매개변수로 함수를 어떻게 사용하는지 확인하기 위해

// inchesToFeet2 함수 타입과 inchesToYards2 함수 타입 모두와 일치하는 함수 타입과 함께 변환할 값을 매개변수로 받을 것

// 이 둘의 함수 데이터 타입은 (Float)->Float 와 같음 새로운 함수는

func outputConversion(_ converterFunc: (Float)-> Float, value : Float) {
    let result = converterFunc(value)
    print("Result or conversion is \(result)")
}
// outputConversion 함수가 호출 될 때 선언한 데이터 타입과 일치하는 함수가 전달되어야 한다.
outputConversion(toYards2, value: 10)   // 야드 변환
outputConversion(toFeet2, value: 10)    // 피트 변환

 

// 함수의 타입을 반환 타입으로 선언하면 함수도 데이터 타입으로 반환될 수 있다.

// 불리언 매개변수의 값에 따라 toFeet2 함수나 toYards 함수 타입을 반환하도록 구성된 함수

func decideFunction (_ feet : Bool) -> (Float) -> Float{
    if feet {
        return toFeet2
    } else {
        return toYards2
    }
}

 

.. 마지막 함수로 함수 매개변수 받기가 조금 어려운거 같아서 다음에 다시 꼭 확인해야 할거같다...ㅠ 

 

 

핵심만 골라 배우는 SwiftUI 기반의 iOS 프로그래밍, 닐 스미스 지음, 황반석 옮김, 제이펍 출판

반응형
Comments