옵셔널 (Swift 문법 중 가장 어렵고 중요!! 필수!!!)
- nil도 저장할 수 있는 옵셔널 타입
무조건 !로 풀면 안됨. nil이 아닐때만!!
- 그리 좋은 방법은 아니다.
-> 더 좋은 방법 : optional binding
if let constantname = optionalName{
//옵셔널 변수가 값이 있다면 언래핑해서 일반 상수 constantname에 대입하고 if문 실행
//값이 없다면 if문의 조건이 거짓이 되어 if문 실행 x
}
if let variablename = optionalName{
//옵셔널 변수가 값이 있다면 언래핑해서 일반 상수 variablename에 대입하고 if문 실행
//값이 없다면 if문의 조건이 거짓이 되어 if문 실행 x
}
콤마는 and의 의미를 가짐
let x : Int? = 1
let y : Int = x!
let z = x
print(x,",",y,",",z) //Optional(1) , 1 , Optional(1)
print(type(of:x),",", type(of:y),",", type(of:z)) //Optional<Int> , Int , Optional<Int>
let a : Int! = 2
print("a=", a, type(of:a)) //a= Optional(2) Optional<Int>
let b : Int = a
print("b=", b, type(of:b)) //b= 2 Int
let c : Int = a!
print("c=", c, type(of:c)) //c= 2 Int
let d = a
print("d=", d, type(of:d)) //d= Optional(2) Optional<Int>
let e = a + 3
print("e=", e, type(of:e)) //e= 5 Int
-> 매우 중요한 예제!!
optional로 사용되지 않으면 자동 unwrap!
?로 된 옵셔널 변수, !로 된 옵셔널 변수의 확실한 차이를 알아야함
? -> 옵셔널을 확실히 풀어서 사용해야함
! -> 옵셔널로 사용되지 않은 경우 자동으로 풀리는 특징
nil이 나올 확률이 거의 없는 경우는 !로 만들고, 확실하지 않은 경우에는 ?
-> nil일 확률이 없는걸 일반형으로 만들지 왜 옵셔널로??? class에서 property는 반드시 초기화를 해야함. 근데 어떤 값으로 해야할 지 애매한 경우가 많아서 그럴 때 nil일 가능성이 없다면 느낌표를 넣어 옵셔널 변수로 만든다.
옵셔널은 연관 값을 갖는 enum이다.
클래스 용어 잘 알고 있기!
클래스를 통해 객체를 만들고 이렇게 만들어진 것을 인스턴스라고 한다.
Property (member variable - 멤버변수)
Method (member function - 멤버함수)
(인스턴스의 타입이 클래스)
형 변환
부모인스턴스를 자식클래스로 만들 때 as!, as?로 downcasting
확실히 캐스팅될거라는 확신은 느낌표로, 아닐 때는 물음표
(지금은 확실히 몰라도 괜찮)
Any와 Anyobject는 대충 이런게 있다. 정도
AnyObject : 어떤 클래스의 객체도 저장 가능
Any : 어떠한 것도 저장이 가능
연산자
연산자의 우선순위 이런거 정리할 필요 없음
그냥 다른 언어들과 다른 것들을 알아둬야 함
x++, x--, 범위 연산자, 배열과 함께 쓰는거, nil합병연산자!!
nil합병연산자 : nil일 때 할당되는 값을 써주고 nil이 아니면 옵셔널이 풀린 값이 나온다
제어문 for는 이제 안 쓰는거다
repeat-while
if문 쓸 때 뒤에 나오는 문장이 하나여도 중괄호는 필수!!
&&과 ,는 같음 (and)
if-else bmi에서 범위 조심 ( <=, < 같은거 체크체크 pdf보기)
guard~let
-> if문과 반대 (표현식이 거짓일때 이부분 실행. 참일 경우는 밖에 있는 코드, guard let은 else가 반드시 나옴)
guard let에서 선언한 변수를 바깥에서도 쓸 수 있음
switch-case (break 안 써도 자동, 부가조건은 where절 사용, fallthrough)
호출할때 사용하는 애는 argument(actual parameter), 실제 받아서 처리하는 매개변수는 (former) parameter
함수선언방법 중요!!
리턴값 없을 때 void 생략 가능
함수의 자료형!!! 중요~~~~~~~~~~~!!!(함수명과 타입)
디폴트매개변수 정의
2개의 정수를 입력받아 가감제 리턴 추가과제 이거 꼭 알아두기~
가변 매개변수도 알아두는게 좋음. 과제했던것
String - import Foundation
bmi 판정하는 함수
if-else를 switch-case로 바꾸기 ...이 아닌 ..< !!!!
return하는 함수와 return 안하는 함수있는데 모든 함수는 return이 있는게 더 낫다.
일급 객체 실습
클로저 , shorthand argument name(예제에서 나온거)
designated initializer 모든 프로퍼티를 초기화
상속, 오버라이드
'iOS > Swift이론' 카테고리의 다른 글
Swift)iOS프로그래밍 : failable initializer 예제 (0) | 2021.10.24 |
---|---|
Swift)iOS프로그래밍 : 가감승제 함수, print format 소수점 (0) | 2021.10.22 |
Swift)iOS프로그래밍 : extension, access modifier, enum (0) | 2021.10.15 |
swift)iOS 프로그래밍 : 클래스 상속(override)과 오버로딩 (0) | 2021.10.08 |
Swift) iOS 프로그래밍 : 클래스메서드, init(), 프로퍼티, 메서드 중첩, (0) | 2021.10.07 |