swift 공부

[arcjeen] 4. swift 함수

arcjeen 2017. 3. 21. 16:29


Function


함수 정의


- Objective-c


(반환형) 함수이름 : (인자타입) 인자값  외부매개변수:(인자타입)인자값 {

내용

}


        - (id)init :(NSMutableDictionary *)passDict list:(NSDictionary *)listArr{

    

                        if (self = [super init]) {

        

                        }

                        return self;

}




- Swift


첫글자는 반드시 영어 또는 _ 로 시작해야한다.


object-c는 외부매개변수와 내부매개변수를 ' : '으로 구분하지만 Swift는 외부매개변수와 내부매개변수를 나란히 작성한후 type을 ' : ' 으로 구분한다


func 함수명 (인자값1:타입, 인자값2:타입) -> 반환타입{

실행내용

return 반환값

}


func 함수명(매개변수1:타입, 외부 매개변수명 내부매개변수명: 타입 ){


}


func printHello(name:String) -> String{

let returnValue = "\(name)은 내이름";

return returnValue;

}


func printHelloWithName(name : String, msg welcomMessage : String){

print(\(name)님  \(welcomMessage));

}


//호출

printHelloWithName("arcjeen",msg:"하이");




 함수 호출


     Objective - c


[self 함수명];

인스턴스명.함수명;

[인스턴스명 함수명];


Swift


함수명();

printHello(inputName);





가변인자값


가변적인 개수의 인자값을 입력받아야 할때 사용.


Objective-c


//헤더선언

- (void)argTest:(NSString *)str, ... NS_REQUIRES_NIL_TERMINATION;

//구현

- (void)argTest:(NSString *)str, ... {

    va_list args;

    va_start(args, str);

    //va_start에서 포인트를 지정한 곳이 시작점이된다. 메모리상의 시작점 args->str

    for (NSString *arg = str; arg != nil; arg = va_arg(args, NSString *)) {

        //va_arg 통해 차례대로  인자의 포인터를 가져옴.

        NSLog(@"Argument = %@", arg);

    }

    va_end(args);//끝났을때 호출.

} 


Swift

func argTest(str:String...){

for r in str {    //배열로 입력된 값 순회탐색하면서 처리

내용

}

}



* Swift 에서 위의 예시에 사용된 매개변수는 상수로써 기능을 하게된다 즉 값의 변경이 불가능 하다 하지만 변수앞에 var 연산자를 추가한다면 상수가아니라 변수로써 선언이되어 함수내에서 값을 수정할 수 있다. 



Inout


Inout 키워드를 이용하면 함수내부에 전달된 변수의 값을 함수내부에서 수정하여 함수 외부의 변수에 영향을 줄 수 있다.


Swift


var count = 30;


func foo(inout paramCount : Int) -> Int{

return ++ paramcount;

}


//호출


print(foo(&count))


//매개변수에 count의 주소값을 전달하여 함수에서 전달받은 주소를 통해 외부인자값에 직접 접근하고 값을 변경한다.