100 days of swiftui: 7
https://www.hackingwithswift.com/100/swiftui/7
func [함수이름]([매개변수 이름]: [매개변수 데이터 타입]) {
[함수 내용]
}
이렇게 특정 명령을 실행하는 함수를 만들어 여러 번 활용할 수 있다.
예:
func waterPlants(plants: [String]) {
for plant in plants {
print("Water \(plant)~")
}
}
let plants1 = ["tulip", "sunflower", "lily"]
let plants2 = ["monstera", "cherry blossom"]
waterPlants(plants: plants1)
waterPlants(plants: plants2)
코드 파일
https://github.com/soaringwave/Ios-studying/commit/6eb4bfad83095e56d5fa97a4df3303e36f5bb9db
return을 이용하여 함수가 값을 반환하게 하거나 함수를 중단시킬 수 있다.
func getFahrenheit(celsius: Double) -> Double {
celsius * 9 / 5 + 32
}
print(getFahrenheit(celsius: 36.5))
위 함수처럼 함수의 명령문이 한 줄로 이뤄져 있다면 return
을 생략해도 된다.
func count10(stop: Int) {
for i in 1...10 {
if i == stop {
return
}
print(i)
}
}
count10(stop: 4)
결과:
1
2
3
코드 파일
https://github.com/soaringwave/Ios-studying/commit/1855c6f2f40e65ba97200949894d26b22cc96848
함수를 사용할 때 값을 여러 개 반환할 때도 있다. 그럴 땐 데이터 그룹인 array, dictionary를 사용할 수도 있다. 그러나 array의 인덱스만 보고 해당 데이터의 의미를 알기 어려울 때도 있고, dictionary에 인덱스 값이 분명히 있다고 장담하지 못해 default를 미리 설정해야 할 때도 있다.
tuple은 데이터 그룹이면서, swift가 tuple의 요소를 모두 알기 때문에 함수에서 값을 반환할 때 사용하면 좋다.
func getIdNumbers() -> (firstNumbers: String, lastNumbers: String) {
return (firstNumbers: "000101", lastNumbers: "4111111")
}
// 예시 1
let idNumbers = getIdNumbers()
let firstNumbers1 = idNumbers.firstNumbers
let lastNumbers1 = idNumbers.lastNumbers
print("\(firstNumbers1)-\(lastNumbers1)")
// 예시 2
let (firstNumbers2, lastNumbers2) = getIdNumbers()
print("\(firstNumbers2)-\(lastNumbers2)")
// 예시 3
let (firstNumbers3, _) = getIdNumbers()
print("\(firstNumbers2)-*******")
getIdNumbers()
는 00년생 1월 1일 생일인 누군가의 주민등록번호를 앞 6자리, 뒤 7자리 숫자를 tuple로 반환한다. 반환받은 tuple은 예시 1처럼 상수나 변수에 나누어 값을 저장해도 되고, 예시 2처럼 튜플 자체를 한 번에 상수나 변수에 저장해도 된다.
만약 튜플의 값 중 사용하지 않을 값이 있다면 예시 3처럼 _
를 입력하여 값을 무시해도 좋다.
func getIdNumbers2() -> (String, String) {
return ("000101", "4111111")
}
print("\(getIdNumbers2().0)-\(getIdNumbers2().1)")
혹은 이렇게 이름 없이 정수 인덱스 값을 활용할 수도 있다.
코드 파일
https://github.com/soaringwave/Ios-studying/commit/81f822d20236eb28752966a247af46455921a604
함수를 실행할 때 사용하는 인수와 함수를 설정할 때 함수 안에서 사용하는 매개변수 이름을 다르게 설정할 수 있다.
func isSomeString(if string: String) {
if string == "some string" {
print("Yes it is some string!")
}
}
isSomeString(if: "some string")
위 예시의 첫번째 줄 if
는 external name이고, string
은 internal name이다. 그래서 인수에는 if, 함수 안의 매개변수는 string을 작성해서 사용할 수 있다. 이러면 데이터 이름으로 허용되지 않는 for, String, func
등을 사용할 수 있다.
contains()
처럼 인수 이름을 적지 않아도 되는 경우에는 아래처럼 external name을 _
로 설정하고 인수에는 데이터만 입력하면 된다.
func is0(_ number: Int) {
if number == 0 {
print("Yes it is 0!")
} else {
print("No it is not 0!")
}
}
is0(3)
코드 파일
https://github.com/soaringwave/Ios-studying/commit/fa7de2fd71233cda4b48d4ae96633d0d2ff67a99