새소식

인기 검색어

TL

20/07/04 TL

  • -

오늘 할 일 :

계산이론 과제

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 프레임워크는 대부분 클래스 사용.
이 점 유의해서 선택

'TL' 카테고리의 다른 글

20/07/07 TL  (0) 2020.07.08
20/07/06 TL  (0) 2020.07.07
20/07/03 TL  (0) 2020.07.03
20/07/02 TL  (0) 2020.07.02
20/06/30 TL  (0) 2020.06.30
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.