Initializer (초기화) 초기화 - 모든 객체는 사용하기 전에 초기화 - 프로퍼티 초기화 - 초기값과 함께 선언된 프로퍼티 - 옵셔널 타입의 프로퍼티 - 초기값이 없고, 옵셔널 타입이 아닌 프로퍼티!! 객체 사용에 앞서서 - 객체를 사용하려면 초기화 필요 - 옵셔널 / 초기값이 있는 프로퍼티 : 자동 초기화 - 옵셔널 타입이 아니고 초기값이 없는 프로퍼티 : 수동 초기화 Initializer - 하나의 클래스에 다수의 Initializer 작성 가능 class Rectangle { var width : Int var height : Int init() { // 초기화 width = 0 height = 0 } } - 파타미터가 있는 Initializer //클래스 선언 class Rectangle ..
클래스의 정의와 객체 생성 클래스 정의 class ClassName { } 객체 생성 var object = ClassName() 소스 코드 파일과 클래스 - 소스 파일 단위와 클래스 정의 단위는 서로 다름 - 하나의 소스 코드 파일에 다수의 클래스 작성 - 하나의 클래스를 개별 소스 코드 파일 생성 - 햐나의 클래스를 다수의 소스 코드파일에 작성 (extension) 프로퍼티 --> 객체의 데이터, 저장/계산 프로퍼티, 값을 저장하고 읽는 행위 저장 프로퍼티 - 데이터를 저장하는 용도 - 데이터 읽기/쓰기 행위 - 객체 생성시 초기화, 초기화 방법 필요 class MyClass { //초기값을 설정한 프로퍼티 var intProperty = 0 //초기값을 설정하지 않은 옵셔널 프로퍼티 var floa..
강제 언래핑 !기호 사용 nil 여부와 관계 없이 언래핑 시도 타입 선언이나 옵셔널 체인에 사용 nil 이면 에러 - nil이 아니면 언래핑 옵셔널 객체 반환 - Int? 타입 객체 반환 let intVal1 = Int("1") 강제 언래핑 - Int 타입 객체 반환 let intVal2 = Int("1")! 강제 언래핑 사용 사례 - 객체 생성(Failable Initializer) - 메소드 호출, 프로퍼티 접근 - 옵셔널 체인 강제 언래핑 사용 예 - 딕셔너리 원소 적근 - 언래핑 성공 let dictionary = ["one":1, "two":2] //dictionary에 있는 키를 사용 let two = dictionary["two"]! // 출력 값 optional 2 //실패 -> 없는 키 ..
옵셔널 스위프트에서 안정성을 추구하기 위한 선언방법 정의된 값이외에 값일 경우 nil를 반환하도록 함 옵셔널 사용 객체나 데이터 다루기 객체나 데이터를 이용한 함수, 프로퍼티, 첨자 접근 등 유효한 객체나 유효한 값에서 정상 동작 nil 에서는 - 비정상 동작 옵셔널 타입 사용 옵셔날 타입의 객체는 nil일 수도 있다 -> 옵셔널 타입 객체는 다른 사용방법 있음 nil인 경우아 nil아닌 경우를 고려 잘못된 옵셔널 사용 예 var optionalStr : String? if optionalStr != nil { print("nil이 아니다!") } else { print("nil이다") } 옵셔널 타입의 객체 사용방법 옵셔널 타입 : nil이거나 혹은 유효한 값 언래핑 : 옵셔널 타입의 변수에서 유효한 ..
if 조건문 if 3 > 2 { print("3은 2보다 크다!") } /*실행결과 3은 2보다 크다! */ nil 비교시 != == nil을 붙어야 함 if - else var bloodType = "AB" if bloodType == "B" { print("혈액형은 B") } eles if bloodType == "A" || bloodType == "O" { print("A 나 O형") } else { print("그러면 AB형?") } /*실행결과 그러면 AB형? */ if - let 바인딩 - 바인딩 : 유요한 값 판단( nil 여부) //vall 이 nil이 아니면 본문내용 실행 //return 타입은 optional! if let val = someFunc(){ print("\(val)") }..
프로토콜(Protocol) - API를 좀 더 간결하게 표현하기 위한 방법 - 프로토콜은 단순히 메소드와 프로퍼티 선언의 모음 - 프토토콜은 어떤 다른 타입이 사용 되는 거의 대부분의 장소에서 사용될 수 있다. 즉, 변수, 함수, 파라미터 등 장점 API를 좀 더 유연하고 표현력 있게 만들 수 있다. 뷰와 컨트롤러 사이의 구조적인 블라인드 통신(델리게이션) 행위를 지히가능( e.g 딕션너리의 키는 해싱될 수 있어야한다) 이질적인 타입들 사이에 기능 공유하기 (String, Array, CountableRange는 모두 Collection) (데이터가 아닌, 기능의) 다중 상속 세가지 측면 프로토콜 선언(메소드와 프로퍼티가 그 프로토콜 안에 있다) 프로토콜을 구현하도록 요구하는 class, struct 혹..
문자열 생성 타입 : String var str1 = "Hello, Swift Language" var str2 : String = "Swift" let strFromInt = String(100) // "100" let char : Chraracter = "F" let strFromChar = String(char) //문자에서 문자열로 String Interpolation : \() let str3 = "1 + 2 = \(1 + 2)" let str4 = "Hello.\(str2)" 형식 문자열 생성 - 일정한 형식에 맞는 문자열 - Foundation Framework 필요 import Foundation String(format: "%03d",12) // "012" String(format: "%..
변수 변수 : 변경가능 var 로 선언 타입정보 선언 생략 가능 대입되는 값에서 추론 var i = 1 //int 형의 i var f : Float = 1.1 //float형의 f i =3 //대입되는 값으로 형 추론 상수 변경 불가능 let으로 선언 let constant = 123 // constant =456 -> 변경불가