iOS/Swift이론

Swift) iOS프로그래밍 : 문법정리

Sweetft 2021. 10. 17. 16:37

옵셔널 (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 모든 프로퍼티를 초기화

상속, 오버라이드