티스토리 뷰
1. 연산자
산술 연산자
비교 연산자 → 대입 연산자(=)의 우선순위가 비교 연산자의 우선순위보다 낮다.
→ 당연하다. 비교 연산자가 있는 식이 먼저 계산되고 그것의 결과값(= Bool)이 변수에 대입되니까.
논리 연산자 → 비교 연산자 계산 이후에 실행.
2. 조건식
if - else if - else 구문 → 꼭 { }로 묶어줘야 된다. (실행할 코드가 한 줄이어도)
var dust = 155
if dust <= 30 {
print("상쾌하군")
}
else if dust > 30 && dust <= 50 {
print("나쁘진 않군")
}
else if dust > 50 && dust <= 100 {
print("안 좋군...")
}
else {
print("최악이군...")
}
switch 구문
var num = 5
switch num {
case 5,6,10:
print("너구나!")
case 11:
print("11 안녕")
default:
print("넌 누구니?")
}
전통적인 프로그래밍 언어(C, Object-C)와의 다른 점 : ✨ Swift의 장점 - 안전하다!
- case문마다 break문을 쓰지 않아도 알아서 하나의 case문만 검사해준다.
→ break문 일일히 안 써줘도 됨. - default문을 안 쓰면 바로 에러를 발생시킨다.
- case문 하나에 여러 개의 조건을 넣을 수 있다.
- case 5, 6, 10 → 5나 6이나 10이면 이 case문 실행switch 구문
3. 반복문
for-in loop
for i in 1...10 {
print(i)
}
// 2씩 증가하게 하려면? stride 사용 : from값부터 to값까지 간격 by만큼
for i in stride(from: 1, to: 10, by: 2) {
print(i)
}
// 2씩 감소하게 하려면? stride 사용 -> by를 음수값으로
for j in stride(from: 10, to: 1, by: -2) {
print(j)
}
for i in 2...9 {
print("\\(i)단")
for j in 1...9 {
// print(String(i) + " X " + String(j) + " = " + String(i * j))
print("**\\(i)** X **\\(j)** = **\\(i * j)**") // String interpolation
}
}
++ 범위 연산자 중 하나인 Closed Range Operator
(a...b) 형태로 범위의 시작과 끝이 명시되어있다. 값 a부터 b까지 해당. for-in loop에 자주 사용된다.
++ String interpolation (문자열 보간법)
print문의 ”” 내에서 문자열과 변수값을 같이 적고 싶을 때 \(변수) 를 쓰면 변수값을 출력할 수 있다!
그냥 그 변수값만 출력할 때는 print(변수이름) 만 적어줘도 충분.
while문 / repeat-while문
var i = 0 // 초기식
while i < 10 { // while문엔 조건식이 들어감
i += 1 // 1씩 증가
print(i)
}
i = 0
repeat {
i += 1
print(i)
} while i < 10 // C언어의 do-while문과 같음
- while문과 repeate-while문의 차이점은 조건식을 확인하고 실행하느냐 / 실행하고 조건식을 확인하느냐 이다.
- while문과 for-in문의 차이점은 조건식이 있냐 / 없냐 이다.
4. Collection 타입
Array(배열) → 넣고 싶은 값들을 대괄호로 묶어준다.
let month = 3
let toDo = "Travel"
// Collection 타입 중 배열
// 위와 같은 값 여러 개를 하나의 변수에 담을 수 있다.
var toDoArray = ["Travel", "Work", "Call"] // -> [String] 타입
var evenNumber = [2, 4, 6, 8] // -> [Int] 타입
toDoArray[0] = "Play" // 배열 안의 값 변경
toDoArray[1]
evenNumber.append(10)
evenNumber.insert(12, at: 0)
evenNumber.remove(at: 0)
print(evenNumber)
for i in toDoArray {
print(i)
} // for-in문은 특히 배열과 자주 함께 쓰인다.
- 배열.append(값) : ‘값’을 배열의 가장 뒤의 인덱스에 넣는다.
- 배열.insert(값, at: 인덱스) : '값'을 배열의 '인덱스' 위치에 넣는다.
- 배열.remove(at: 인덱스) : 배열의 ‘인덱스' 위치의 값을 지운다.
++ Swift의 배열은 다른 전통적인 프로그래밍 언어와는 다르게 배열 안의 값들을 메모리에 연속적으로 저장하지 않는다. 그렇기 때문에 배열의 사이에 값을 자유롭게 넣을 수 있다.
Dictionary(딕셔너리) → [ ] 안에 key:value쌍으로 값을 넣어준다.
var toDoDicLong : Dictionary<Int, String> = [11: "Play", 12: "Work", 14: "Drink"]
var toDoDic = [11: "Play", 12: "Work", 14: "Drink"]
print(toDoDic.keys) // key값들만 출력
print(toDoDic.values) // value값들만 출력
toDoDic[11] = "Drink" // 단순 할당만으로 값 변경 가능
print(toDoDic) // 전체 출력
toDoDic[12]
print(toDoDic[12]!) // key 12의 value값만 출력
// 값 삭제하는 법 1
toDoDic.removeValue(forKey: 11) // key:value쌍 하나 삭제.
print(toDoDic)
// 값 삭제하는 법 2
toDoDic[12] = nil // nil = 값이 없다. 무.
// -> key 12에 해당하는 value를 없앤다는 뜻.
print(toDoDic)
// 값 추가
toDoDic[15] = "Study" // 값 추가도 단순 할당으로 가능!
print(toDoDic)
// for-in문 사용해서 출력
for (k, v) in toDoDic {
print("key: \\(k), value: \\(v)")
} // (key, value) 쌍으로 받아와서 출력.
// key만
for k in toDoDic.keys {
print(k)
}
// value만
for v in toDoDic.values {
print(v)
}
🧐 배열과 딕셔너리의 차이점은? 둘을 구분하여 사용하는 이유가 있나?
배열: 인덱스를 통해 값을 가져오기 때문에, 중간에 값이 추가되거나 삭제되면 순서가 바뀌어서 인덱스를 통해 값을 가져오면 다른 값이 나올 수가 있다.
- 값을 추가한 순서대로 저장된다.
- 같은 값을 여러 개 넣어도 다 저장된다.
⇒ 그래서 배열에서 특정 값을 찾기 위해서는 배열의 모든 요소를 하나하나 찾아봐야 한다...!
딕셔너리: 순서가 상관이 없다. key값만 알면 대응하는 value값을 한번에 가져올 수 있다!
- 같은 key에 다른 value가 들어오면 새로운 값 하나만 저장된다. = 특정 key에 대응되는 value는 오직 하나만 존재!
- 값을 추가한 순서와 상관없이 저장된다. → run 돌릴 때마다 [] 안의 순서 달라짐.
✍🏻 String?처럼 타입 뒤에 ?를 붙이면 Optional로 선언된 것.
- Optional은 nil이 될 수도 있고 값을 가질 수도 있다.
- Optional을 안전하게 사용하기 위해서는 unwrap하는 과정이 꼭 필요하다.
- 방법 1: Forced Unwrapping (강제 언래핑)
Optional값 뒤에 !를 붙인다.
- 방법 2: Optional Binding (옵셔널 바인딩)
if let을 사용.
if let result = dic["key"] {
print(result)
}
// “key”에 대응되는 value가 있으면 리터럴로 print된다!
❓ 왜 print(toDoDic[11])을 한 값이 Optional로 나오는 걸까?
⇒ Dictionary의 접근값은 Optional로서 읽어오기 때문.
⇒ 왜?
⇒ Dictionary에 특정 key값으로 접근할 때 해당 key에 대응되는 value가 없을 수도 있기 때문이다. 그런 상황을 막기 위해 아예 다 Optional로 읽는 것이다.
제 글이 도움이 되었다면 좋아요 부탁드립니다! 😊
참고 사이트 :
→ 이 강의를 듣고 정리한 내용입니다!
'Swift' 카테고리의 다른 글
[Swift] Swift navigation bar custom 하는 방법 (0) | 2022.04.20 |
---|---|
[Swift] Swift 스토리보드 없이 UIButton, UILabel 생성 (0) | 2022.04.15 |
[Swift] Swift에서 사운드 파일(.mp3, .wav 등), 음악 파일 재생하는 방법 (0) | 2022.04.13 |
[Swift] #3. Swift 클래스(class), 구조체(struct), 열거형(enum) 개념 정리 (0) | 2022.04.09 |
[Swift] #2. Swift 함수 관련 이것저것 정리 (0) | 2022.04.07 |
- Total
- Today
- Yesterday
- 자료구조
- Baekjoon
- 이분탐색
- 알고리즘
- MySQL
- 투포인터
- 코테준비
- 구현
- Python
- 코테
- BFS
- SQL
- Programmers
- 그리디
- ios
- 정렬
- Swift로백준풀기
- 프로그래머스
- 백준
- 다이나믹프로그래밍
- ios앱개발
- 스택
- dp
- 우선순위큐
- Swift
- 큐
- 힙
- 백트래킹
- swea
- 코딩테스트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |