[arcjeen] 4. swift 함수
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의 주소값을 전달하여 함수에서 전달받은 주소를 통해 외부인자값에 직접 접근하고 값을 변경한다.