오늘 할 일 :
계산이론 과제
oss 신청
swift 강의
파이썬 공부
내일 할 일 :
바텀업 모임
파이썬 공부
리액트 강의
병원 예약
------------------------------------------------------------------------------------
콜렉션 타입과 많이 사용
// for item in ites {
// code
// }
var integers = {1, 2, 3}
let people = {"yagom": 10, "eric": 15, "mike": 12}
for integer in integers {
print(integer)
}
// dictionary의 item 자리에 key와 value로 된 튜플로 들어감.
for (name, age) in people {
print("\(name): \(age)")
}
// while condition {
// code
// }
while(integers.count > 1) {
integers.removeLast()
}
// do while구문과 같음
// repeat {
// code
// } while condition
repeat {
integers.removeLast()
} while integers.count > 0
----------------------------------------------------------------------
optional : 값이 있을 수도, 없을 수도 있음. nil의 가능성을 포함함.
compile 단계에서도 안전하게 수행 가능. 값을 보호해주는 상자.
enum(열거형) + general
let optionalValue: Int? = nil 이런 식으로 선언 가능.
! : 암시적 추출 옵셔널
기존 변수처럼 사용 가능. none과 some으로 문으로 값 있는지 없는지 확인 가능. 잘못된 접근으로 런타임 오류 발생
? : 일반적인 옵셔널
변수처럼 사용 불가 (옵셔널과 일반 값은 다른 타입임). none과 some으로 값 있는지 확인 가능.
-----------------------------------------------------------------------
옵셔널의 값을 꺼내오는 방법
optional binding : nil 체크와 동시에 안전한 값 추출
값이 있으면 꺼내오고 없으면 말고.
if-let 구문으로 사용 가능.
둘 다 nil이 아니여야 실행 가능
if let name = myName, let friend = yourName {
print("\(name) and \(friend)")
}
force unwwapping : 옵셔널의 값을 강제로 추출. 비추
강제로 막을 부수고 꺼내옴. 만약 nil 들어 있으면 런타임 오류.
var myName: String? = "SK"
print(myName!) //! 안 붙여도 되긴 함.
------------------------------------------------------------------------
구조체는 타입을 정의하는 것. 대문자로 정의.
swift의 큰 뼈대는 모두 구조체
//struct 이름 {
// 구현부
//}
// 메서드 : 타입 안에 들어있는 함수
// 프로퍼티 : 타입 안에 들어있는 함수
// var, let은 인스턴스 프로퍼티. static은 타입 프로퍼티
struct Student {
var name: String = "unknown"
// ''로 묶어주면 다른 이름으로 사용 가능
var 'class' : String = "Swift"
static func selfIntroduce() {
print("학생타입입니다")
}
func selfIntroduce() {
print("저는 \(self.class)반 \(name)입니다.")
}
}
Student.selfIntroduce()
var sk: Student = Student()
sk.name = "SK"
sk.class = "스위프트"
sk.selfIntroduce()
------------------------------------------------------------------------------
class는 참조 타입. 구조체는 값 타입.
class는 다중상속 안 됨. 단일상속
/*
class 이름 {
구현
}
*/
타입 메소드에는 재정의 못하는 static과 못하는 class가 있음.
class는 가변 프로퍼티를 밖에서 var뿐만 아니라 let으로 선언했을 때도 변경 가능.
구조체에서는 못함.
--------------------------------------------------------------------------------
enum(열거형)은 타입이므로 대문자 카멜케이스를 사용해 이름을 정의
각각의 케이스가 고유의 값으로 취급. 각 case는 소문자 카멜케이스로 정의
enum 이름 {
case 이름1
case 이름2
case 이름3, 이름4, 이름5
...
}
enum Weekday {
case mon
case tue
case wed
case thu, fri, sat, sun
}
var day: Weekday = Weekday.mon
// 앞에서 Weekday 이미 선언돼서 밑에선 생략 가능
day = .tue
print(day)
switch day {
case .mon, .tue, .wed, .thu:
print("평일입니다.")
case Weekday.fri:
print("금요일입니다.")
case .sat, .sun:
print("주말입니다.")
}
원시값
C언어의 enum처럼 정수값을 가질 수도 있다.
rawValue를 사용하면 됨. case별로 각각 다른 값을 가져야 함.
enum Fruit: Int{
case apple = 0
case grape = 1
//이렇게 해도 c언어처럼 1씩 알아서 늘어남
case peach
}
hashable 프로토콜을 따르는 모든 타입이 원시값으로 지정 가능함.
String의 경우에는 case의 이름을 그대로 가져옴.
값이 없을 경우 열거형의 case로 초기화 가능.(optional 이용)
메서드도 추가할 수 있음.
-------------------------------------------------------------------------
구조체 :
값 타입이기 때문에 참조가 아닌 복사를 원할 때, 상속을 받을 필요가 없을 때 구조체를 사용.
스위프트는 구조체, 열거형 사용 선호
apple 프레임워크는 대부분 클래스 사용.
이 점 유의해서 선택