guard~let 활용
var x = 1
while true{
guard x < 5 else { break }
print(x, terminator: " ")
x = x + 1
}
//1 2 3 4
◼ guard는 return, break, continue, throw 등 제어문 전환 키워드를 쓸 수 있는 상황이라면 사용이 가능
◼ 함수 뿐 아니라 반복문 등 특정 블록 내부에 있으면 사용 가능
if~let
func printName(firstName:String, lastName:String?){
if let lName = lastName {
print(lName, firstName)
}
else{
print("성이 없어요")
}
}
printName(firstName: "동섭", lastName:"안")
printName(firstName: "동섭", lastName:nil)
//안 동섭
//성이 없어요
guard~let
func printName(firstName:String, lastName:String?){
guard let lName = lastName else{
print("성이 없어요")
return
}
print(lName,firstName)
}
printName(firstName: "동섭", lastName:"안")
printName(firstName: "동섭", lastName:nil)
//안 동섭
//성이 없어요
◼ 언래핑된 number 변수를 guard문 밖에 있는 코드가 사용할 수 있다
switch-case문 결합
let anotherCharacter: Character = "a"
switch anotherCharacter {
case "A", "a":
print("The letter A")
default:
print("Not the letter A")
}
//The letter A
범위 지정 매칭
let weight = 70.0
let height = 172.0
let bmi = weight / (height*height*0.0001)
var body = ""
switch bmi {
case 40... where bmi / 1.0 > 40.0:
body = "3단계 비만"
print("정상작동")
case 30...40 where bmi / 1.0 > 30.0:
body = "2단계 비만"
print("정상작동")
case 25...30 where bmi / 1.0 > 25.0:
body = "1단계 비만"
print("정상작동")
case 18.5...25 where bmi / 1.0 > 18.5:
body = "정상"
print("정상작동")
default:
body = "저체중"
}
print("BMI:\(bmi), 판정:\(body)")
//정상작동
//BMI:23.66143861546782, 판정:정상
◼ where절을 switch case에 부가적인 조건을 추가
var numbers: [Int] = [1, 2, 3, 4, 5]
for num in numbers where num > 2 {
print(num)
}
//3
//4
//5
◼ switch, catch, while, guard, for 등에서 사용 가능
fallthrough
var value = 4
switch (value)
{
case 4:
print("4")
fallthrough
case 3:
print("3")
fallthrough
case 2:
print("2")
//fallthrough
default:
print("1")
}
//4
//3
//2
◼ 다음에 break 문을 포함할 필요가 없음
◼ 일치하는 case문을 만나면 자동으로 빠져나옴
내부 매개변수이름과 외부 매개변수이름
func add(x: Int, y: Int) -> Int {
print(#function)
return(x+y)
}
print(add(x:10, y:20))
print(type(of:add))
func add(first x: Int, second y: Int) -> Int {
//외부 내부:자료형,외부 내부:자료형 -> 리턴형
print(#function)
return(x+y) //함수 정의할 때는 내부 매개변수명을 사용
} //return(first+second)은 오류
print(add(first:10, second:20))//add(x:10, y:20)은 오류
//함수 호출할 때는 외부 매개변수명을 사용
func add(_ x: Int, _ y: Int) -> Int {
print(#function)
return(x+y)
}
print(add(10, 20))
func add(_ x: Int, with y: Int) -> Int {
print(#function)
return(x+y)
}
print(add(10, with:20))
//add(x:y:)
//30
//(Int, Int) -> Int
//add(first:second:)
//30
//add(_:_:)
//30
//add(_:with:)
//30
c/c++함수 -> Swift함수
func ddd(x: Int) -> Int{
return(x*2)
}
print(ddd(x:10))
func setX(x: Int) -> Int {
let xx = x
return(xx)
}
var xx = setX(x:70)
print(xx)
func getX(_ x: Int) -> Int {
return(x)
}
print(getX(10))
func add(x: Int, y: Int) -> Int{
return(x+y)
}
print(add(x:10, y:20))
func setXY(x: Int, y: Int) -> (xx: Int, yy: Int) {
let xx = x
let yy = y
return(xx, yy)
}
var xx2 = setXY(x:10,y:20)
print(xx2)
//20
//70
//10
//30
//(xx: 10, yy: 20)
함수명과 함수자료형
함수명 : changeDatePicker(_ :)
함수자료형 : UIDatePicker
함수명 : pickerView(_ :) , rowHeightForComponent :)
함수자료형 : UIPickerView , Int , CGFloat
함수명 : pickerView(_ :) , viewForRow : , forComponent : , reusing :)
함수자료형 : UIPickerView , Int , Int , UIView , UIView
함수명 : numberOfComponents(in :) , pickerView(_ :) , nuberOfRowsInComponent :)
함수자료형 : UIPickerView , Int , UIPickerView , Int , Int
함수명 : PickerView(_ :) , didSelectRow(_ :) , inComponent :)
함수자료형 : UIPickerView , Int , Int
디폴트 매개변수 정의
func sayHello(count: Int, name: String = "길동") -> String {
return ("\(name), 너의 번호는 \(count)")
}
var message = sayHello(count:100)
print(message)
var message1 = sayHello(count:10, name: "소프트")
print(message1)
//길동, 너의 번호는 100
//소프트, 너의 번호는 10
◼ argument로 전달하는 값이 없는 경우, 디폴트 매개변수 값을 사용
◼ 선언할 때 매개변수에 디폴트 값을 할당
◼ 이름을 전달하지 않고도 호출 가능 함수를
func add(x: Double, y: Double, z: Double) -> (xx: Double, yy: Double, zz: Double) {
let xx = x * 1.2
let yy = y * 2.4
let zz = z * 3.6
return (xx, yy, zz)
}
var result = add(x:5,y:10,z:20)
print(result)
print(result.xx)
print(result.yy)
print(result.zz)
//(xx: 6.0, yy: 24.0, zz: 72.0)
//6.0
//24.0
//72.0
◼ 함수로부터 여러 개의 결과 반환
◼ 함수는 여러 결과 값들을 튜플로 감싸서 반환할 수 있음
import Foundation
func sss(x : Int, y : Int) -> (sum : Int, sub : Int, mul : Int , div : Double, rem : Int)
{
let sum = x+y
let sub = x-y
let mul = x*y
let div = Double(x)/Double(y) //같은 자료형만 연산 가능
let rem = x%y
return (sum, sub, mul, div, rem)
}
var result = sss(x:10,y:3)
print(type(of:sss))
print(result.sum)
print(result.sub)
print(result.mul)
print(result.div)
print(result.rem)
print(String(format: "%.3f", result.div))
//(Int, Int) -> (sum: Int, sub: Int, mul: Int, div: Double, rem: Int)
//13
//7
//30
//3.3333333333333335
//1
//3.333
◼ 2개의 정수를 입력받아 가감제 리턴
가변 매개변수
func add(numbers:Int...){
var sum:Int = 0
for num in numbers where num > 2 {
sum += num
}
print(sum)
}
add(numbers:1,2,3,4,5,6)
//18
◼ 함수가 가변 매개변수를 받는다는 것을 가리키기 위해서 세 개의 점(…)을 사용
◼ 지정되지 않은 개수의 String 값을 매개변수로 받아서 콘솔에 출력
inout매개변수
var myValue = 10
func doubleValue (value: inout Int) -> Int {
value += value
return(value)
}
print(myValue)
print(doubleValue(value : &myValue)) //출력 값? 레포트
print(myValue)
//10
//20
//20
◼ call by reference하고 싶은 매개변수의 자료형 앞에 inout 씀
◼ call by reference하고 싶은 변수에 &붙여서 호출
'iOS' 카테고리의 다른 글
Swift 문법 (extension / 접근 제어 / protocol / enum) (0) | 2021.10.19 |
---|---|
Swift 문법 (클래스/ 클래스 상속) (0) | 2021.10.12 |
Swift 문법 (1급 객체 / 1급 시민 / 글로저 / 클래스 기초) (0) | 2021.10.05 |
옵셔널(optional) / 연산자(operator) / 제어문 (0) | 2021.09.21 |
Swift (0) | 2021.09.14 |