공부한 것 꼭꼭 씹어먹기

함수 본문

Swift 기초

함수

젤라솜 2021. 10. 24. 19:34
반응형
func hello(name: String) -> String {
	return "Hello~~ " + name
}

let message = hello(name: "Zella")

// 파라미터에 여러개 넣기(가변 매개변수) 한 함수당 한 개 쓸 수 있음 
func addNumbers(numbers: Int...) -> {
	var sum = 0
	for num in numbers {
		sum += num
	}
	return sum
}

addNumbers(numbers: 1,2,3,4,5)

// 반환값 여러개 받기
func myInfo() -> (name: String, weight: Int){
	return ("은혜", 47)
}
let info = myInfo()
print(info.name)

// Argument label : 입력값에 대한 설명(파라미터 이름은 간략하게 쓰고 대신 아규먼트레벨에 자세한 설명을 쓴다)
func calculate(multiflyFirstNumber num1: Int, bySecondNumber num2: Int) -> Int {
	return num1 * num2
}
calculate(multiflyFirstNumber: Int, bySecondNumber: Int)

// Argument label 안쓰고 싶을때는 주로 이렇게 생략해서 쓴다
func calculate(_ num1: Int, _ num2: Int) -> Int {}
calculate(2,4) // argument label을 안쓰고 파라미터 값만 써줘도 됨

// inout 키워드 : 파라미터는 let이라서 함수 안에서 값을 변경할 수 없음. 바꿔서 쓰고 싶을때 inout을 써준다
func addTwoNumber(num1: Int, num2: inout Int) -> Int {
	num2 = 7 // inout키워드를 안쓰면 여기서 에러가 난다. let에 값을 재할당 했기 때문에
	return num1 + num2
}

var test1 = 2
var test2 = 3
addTwoNumber(num1: test1, num2: &test2) 
print(test2) // 7이 나온다. 
// num1에는 test1의 값이 복사되서 들어감. 즉 num1과 test1의 주소값은 다르다.(call by value)
// num2에는 test2의 메모리 주소(&test2)가 들어감. 즉 num2와 test2는 같은 주소를 공유한다.
// 그래서 addTwoNumber 함수 안에서 num2 값을 바꿨을때 test2의 값도 바뀐다.(call by reference)

/** TIP **/
addTwoNumber(num1: test1, num2: &test2) 
// 그냥 이렇게 하면 에러 나옴. 반환값을 받지 않았다며.. 그럴때는
_ addTwoNumber(num1: test1, num2: &test2) // 앞에 underscore 써주면 된다!

 

 

패스트캠퍼스 ios 앱 개발 강의를 듣고 공부한 내용을 정리하였습니다.

반응형

'Swift 기초' 카테고리의 다른 글

상속  (0) 2021.10.27
property  (0) 2021.10.26
class, struct, enum  (0) 2021.10.25
optional  (0) 2021.10.24
switch, for, array, dictionary, set  (0) 2021.10.24
Comments