<TIL>
์ค๋์ Swift ๋ฌธ๋ฒ์ ์ ๋ฆฌํ๋ ค๊ณ ํ๋ค.
๋ฐ์ดํฐ ํ์
, ์ฐ์ฐ์, ์กฐ๊ฑด๋ฌธ๊ณผ ๋ฐ๋ณต๋ฌธ, ์ต์
๋, ์ธํธ, ๋์
๋๋ฆฌ...
์ผ๋ถ๋ถ์ ์ด์ ์ ๊ณต๋ถํ๋ ๋ด์ฉ์ด๋ผ ์ดํดํ๊ธฐ๋ ์ฌ์ ์ง๋ง,
๋ง์ ์ ๋ฆฌํ๋ ค๊ณ ํ๋ ๋ง๋ก ํ์ด๋ด๋๊ฒ ์ด๋ ค์ด ๊ฒ ๊ฐ๋ค!
(๊ทธ๋์ ๊ทธ๋ฅ ๋ฐฐ์ด๋๋ก ๋ฐ๋ผ์ ์ ๋ฆฌ.. ๋์ ๋์ ๊ณต๋ถ..๐)
์ค๋์ ์จ๋ณด๋ฉ ํ์์ ํ๋ก๊ทธ๋๋ฐ ํ์ผ๋ก ์๋ก ๋ฐ๋์๋ค.
์๋ง ๋ฌธ๋ฒ ๊ธฐ์ด์์ ์ฌํ๊น์ง 2์ฃผ๊ฐ ์๋ก์ด ๋ถ๋ค๊ณผ ํจ๊ปํ ๊ฒ ๊ฐ๋ค!
๋ฐ๋ก ์๋ ๋ด์ฉ์ด ์ค๋ ๊ฐ์๋ก ๊ณต๋ถํ ๋ฌธ๋ฒ๋ค์ด๋ค.
๋ฐ์ดํฐ ํ์
(Data Type)
Int - ์ ์, -2,147,483,648 ~ 2,147,483,647 ์ฌ์ด์ ์ซ์๋ฅผ ํํ ๊ฐ๋ฅ
Float - ์ค์, ์์์ ์ ํํ, 32๋นํธ ๋ถ๋ ์์๋ฅผ ํํ ๊ฐ๋ฅ, ์์์ ์ดํ 6์๋ฆฌ๊น์ง ๊ฐ๋ฅ
Double - ์์์ ์ ํํ, 64๋นํธ ๋ถ๋ ์์๋ฅผ ํํ ๊ฐ๋ฅ, ์์์ ์ดํ 15์๋ฆฌ ์ด์ ๊ฐ๋ฅ
(Float, Double ๋ชจ๋ ์ ํฉํ ์ํฉ์์๋ 'Double' ์ฌ์ฉ!)
Bool - true or false
String - ๋ฌธ์์ด
Character - ํ๋์ ๋ฌธ์
Tuple - ์ฌ๋ฌ ๊ฐ์ ํ๋๋ก ๊ทธ๋ฃนํ ํ ๊ฒ, ๋จ์ํ ๊ทธ๋ฃน์ ์ฉ์ดํ๊ณ ๋ณต์กํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๋ง๋๋ ๋ฐ๋ ์ ํฉํ์ง ์์.
Any
- ๋ค์ํ ๋ฐ์ดํฐ ํ์
์ ๊ฐ์ ์์ฉํ ์ ์์.
- Any ๋ฐฐ์ด์ ๋ง๋ค๋ฉด ํน์ ํ์
์ ๋ฐฐ์ด์ด ์๋๋ผ ์ฌ๋ฌ ํ์
์ ๋ด์ ์ ์์.
- Any ๋ฐ์ดํฐ ํ์ ๋์
ํ๋ ค๋ฉด ๋ฐ๋์ ํ ๋ณํ์ด ํ์.
var anyArray: [Any] = [1, "Hi", false]
var anyValue: Any = 1000
anyValue = "๋ชจ๋ ํ์ ์์ฉ ๊ฐ๋ฅ"
anyValue = 1234.56
// ์ปดํ์ผ ์๋ฌ
let doubleValue: Double = anyValue
// → Error: Cannot convert value of type 'Any' to specified type 'Double'
// Any ํ์ ์ Double ๊ฐ์ ๋ฃ๋ ๊ฒ์ ๊ฐ๋ฅํ์ง๋ง, ์ด ๋์ ์์ฐํ ๋ค๋ฅธ ํ์ ์ด๊ธฐ ๋๋ฌธ์
// Double ํ์ ์ ๊ฐ์ Any ํ์ ์ ๊ฐ์ ํ ๋นํ ๋์๋ ๋ช ์์ ์ผ๋ก ํ์ ์ ๋ฐํํด ์ฃผ์ด์ผ ํ๋ค.
์ฐ์ฐ์
<์ฐ์ ์ฐ์ฐ์>
๋ง์
→ + / +=
๋บ์
→ - / -=
๊ณฑ์
→ *
๋๋์
→ /
๋๋จธ์ง → %
<๋น๊ต ์ฐ์ฐ์>
๊ฐ๋ค / ๊ฐ์ง ์๋ค → == / !=
ํฌ๋ค / ์๋ค → > / <
ํฌ๊ฑฐ๋ ๊ฐ๋ค / ์๊ฑฐ๋ ๊ฐ๋ค → >= / <=
<๋
ผ๋ฆฌ ์ฐ์ฐ์>
๋
ผ๋ฆฌ ๋ถ์ Not → !
ex) !a → true๋ false๋ก, false๋ true๋ก ๋ณํ
๋
ผ๋ฆฌ ๊ณฑ AND → &&
ex) a && b → ๋ ๊ฐ(a,b) ๋ชจ๋ true ์ผ ๋, true / ์ฆ, ์ฒซ ๋ฒ์งธ ๊ฐ์ด false๋ผ๋ฉด ์ฆ์ false๋ก ๋ฐํ
๋
ผ๋ฆฌ ํฉ OR → ||
ex) a || b → ๋ ์ค ํ๋๊ฐ true๋ฉด true / ์ฆ, ์ฒซ ๋ฒ์งธ ๊ฐ์ด true ๋ผ๋ฉด ์ฆ์ true๋ก ๋ฐํ
<๋ฒ์ ์ฐ์ฐ์>
a ์ด์ b ์ดํ → (a...b)
a ์ด์ b ๋ฏธ๋ง → (a..<b)
๋ฒ์ ์์ ํน์ ๋๋ง ์ง์ → a... / ...a
(์ฌ๊ธฐ์ a๋ ๋ฒ์์ ํฌํจ)
<์ผํญ ์ฐ์ฐ์>
a ? b : c
→ a์ ๋ต์ด true ๋ฉด b, false๋ฉด c ๊ฐ์ ์ฌ์ฉ
→ if-else ๋ฌธ์ ๊ฐ๋ตํ ํํํ๋ค๊ณ ์๊ฐํ๋ฉด ๋จ.
์กฐ๊ฑด๋ฌธ(if ๋ฌธ, switch ๋ฌธ)
โท if ๋ฌธ
์กฐ๊ฑด์ ํ์ธํ๋ ๋ฌธ๋ฒ์ผ๋ก if ๋ฌธ์ ์์ฑํ ์กฐ๊ฑด์ด true ์ธ ๊ฒฝ์ฐ์๋ง ๊ตฌํ๋ถ ์ฝ๋๋ฅผ ์คํํ๋ค.
temperature๋ 17์ด๊ณ , if ์ else if ๋ชจ๋ ํด๋นํ์ง ์์ else ๋ฌธ์ ์๋ ๊ฐ์ด ์ถ๋ ฅ๋ ๊ฒ์ด๋ค.
โท switch ๋ฌธ
- switch ๋ฌธ์ ์ฌ๋ฌ ์ผ์ด์ค๋ค๊ณผ ๊ฐ์ ๋น๊ตํ๊ณ , ์ผ์นํ๋ ์ฒซ ๋ฒ์งธ ์ผ์ด์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌํ๋ถ ์ฝ๋ ๋ธ๋ก์ ์คํํ๋ค.
- switch ๋ฌธ์ ์ด๊ฑฐํ(enum)๊ณผ ํจ๊ป ์์ฃผ ์ฌ์ฉํ๋ค.
- ๋ชจ๋ case๊ฐ ์ ์ฉ๋์ง ์๋ ๊ฒฝ์ฐ default์ ๊ตฌํ๋ ์ฝ๋๊ฐ ์คํ๋๊ณ , default๋ ํญ์ ๋ง์ง๋ง์ ํ์ํ๋ค.
- ํน์ ์ผ์ด์ค์ ์คํ ๊ตฌ๋ฌธ์ด ์๋ ๊ฒฝ์ฐ break ํค์๋๋ฅผ ๋ฐ๋์ ์ฌ์ฉํ๋ค.
- ํน์ ์ผ์ด์ค์ ํด๋น๋์ด ์คํ ๊ตฌ๋ฌธ์ด ์คํ๋ ์ดํ์ ๋ค์ ์ผ์ด์ค ๋ธ๋ญ์ ์คํํ๋ ค๋ฉด fallthrough ํค์๋๋ฅผ ์ฌ์ฉํ๋ค.
number๊ฐ 5์ด๊ธฐ ๋๋ฌธ์, case 5์ ํด๋นํ๋ print("5")๊ฐ ์ถ๋ ฅ๋๊ณ ,
fallthrough๋ก ๋ค์ ๋ธ๋ญ์ผ๋ก ์ด๋ํด print("default")๊ฐ ์ถ๋ ฅ๋์๋ค.
๋ฐ๋ณต๋ฌธ (for ๋ฌธ, while ๋ฌธ)
โท for ๋ฌธ
for๋ฌธ์ ์ํํ ์ ์๋ ํ์
(๋ฐฐ์ด, ๋์
๋๋ฆฌ ๋ฑ)์ ์ํํ๊ฑฐ๋
ํน์ ํ์๋งํผ ๋ก์ง์ ๋ฐ๋ณตํ ๋ ์ฃผ๋ก ์ฌ์ฉํ๋ค.
let alphabets: [String] = ["a", "b", "c", "d"]
for character in alphabet {
print(character)
}
// a
// b
// c
// d
_______________________________________________
let students = ["Tom": 2, "Harry": 4, "Sarah": 1]
for (name, grade) in students {
print("\(name) ์ \(grade) ํ๋ ์ด์ผ!")
}
// Tom ์ 2 ํ๋ ์ด์ผ!
// Harry ์ 4 ํ๋ ์ด์ผ!
// Sarah ์ 1 ํ๋ ์ด์ผ!
โท while ๋ฌธ
- ํน์ ์กฐ๊ฑด์ด ๋ง์กฑํ๋ ๋์ ๋ด๋ถ๋ก์ง์ ๊ณ์ํด์ ์คํํ๋ ๋ฐ๋ณต๋ฌธ์ด๋ค.
- ์ข
๊ฒฐ ์กฐ๊ฑด์ ์ ํด์ฃผ์ง ์์ผ๋ฉด ๋ฌดํ๋ฃจํ๋ก ๋๊ฒ ๋๋ค.
- ๋ฐ๋ณต๋ฌธ์ ๊ฐ ํจ์ค๊ฐ ์์ํ ๋ ์กฐ๊ฑด์ ํ๊ฐํ๋ค.
'index: Int = 0' ์ด๊ณ , 'index < 4' ๊ฐ 'false'๊ฐ ๋ ๋ ๊น์ง while ๋ฌธ ์์ ์๋ ๊ตฌํ ์ฝ๋๋ฅผ ๊ณ์ ๋์์,
๊ฒฐ๊ตญ index๊ฐ 5๊ฐ ๋์ด while ๋ฌธ์ ๋น ์ ธ ๋์ ๋๋๊ฒ ๋๋ค.
์ต์ ๋(Optional)
โท ์ต์
๋(Optional)
- ๊ฐ์ด ์์ ์๋ ์์ ์ ์๋ ์ํฉ์์ ์ฌ์ฉํ๋ค.
- ์ต์
๋์ ?(๋ฌผ์ํ)๋ก ๋ํ๋ธ๋ค.
- ์ต์
๋ ํ์
๋ผ๋ฆฌ์ ์ฐ์ฐ์ ๋ถ๊ฐ๋ฅํ๋ค.
// ์ถ์ฝ ํ์ ํํ๋ฒ
var myFavoriteNum: Int? = 777
// ์ ์ ํ์ ํํ๋ฒ
var myPetNames: Optional<String> = "๋๋ถ์น์ฆ"
// ์ต์ ๋ ํ์ ๋ผ๋ฆฌ ์ฐ์ฐ ๋ถ๊ฐ๋ฅ
var numA: Int? = 5
var numB: Int? = 7
numA + numB // Error ๋ฐ์! → String๋ ๋ง์ฐฌ๊ฐ์ง
โท nil
๋ณ์์ nil์ ํ ๋นํ์ฌ ๊ฐ์ด ์๋ ์ํ์ ์ต์
๋ ํ๋กํผํฐ๋ฅผ ๋ง๋ค ์ ์๋ค.
(var petName: String? // ์ด๋ ๊ฒ ๊ฐ์ ํ ๋นํ์ง ์์ ๊ฒฝ์ฐ์๋ ์๋์ผ๋ก nil๋ก ์ค์ ๋๋ค.)
โท ์ต์
๋ ๋ฐ์ธ๋ฉ
- ์ต์
๋ ๊ฐ์ด ๋น๊ฐ์ธ์ง ์กด์ฌํ๋์ง ๊ฒ์ฌํ ํ, ์กด์ฌํ๋ ๊ฒฝ์ฐ์๋ ๊ทธ ๊ฐ์ ๋ค๋ฅธ ๋ณ์์ ๋์
์์ผ ๋ฐ์ธ๋ฉํ๋ ๊ฒ์ ๋งํ๋ค.
(์์ ์ ๋ฆฌํด๋์ ๊ฒ์๊ธ ์ฐธ๊ณ )
2024.02.22 - [๋ถ๋ฅ ์ ์ฒด๋ณด๊ธฐ] - Swift - Optional(์ต์ ๋)_๊ณ ๊ธ ๊ธฐ๋ฅ
โท ์ต์
๋ ๋ณ์ ๊ฐ์ด nil์ธ ๊ฒฝ์ฐ๋ฅผ ์ํด ๊ธฐ๋ณธ๊ฐ ์ค์ (nil-coalescing)
- ?? (๋ฌผ์ํ 2๊ฐ)๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ๋ณธ๊ฐ์ ์ฌ์ฉํ ์ ์๋ค.
- ?? ์ ์ฌ์ฉํ์ฌ ๊ฐ์๊ฐ์ ๋ถ์ฌํ ๋ณ์๋ ์ต์
๋ ํ์
์ด ์๋๋ค.
var likeNum: Int? = 5
let num = optNum ?? 8
print(num) // ์ถ๋ ฅ๊ฐ: 5 → ์ฌ๊ธฐ์ num์ ์ต์ ๋์ด ์๋ ๊ทธ๋ฅ Int ํ์ ์
_________________________________________________________
optNum = nil
let num2 = optNum ?? 12
print(num) // ์ถ๋ ฅ๊ฐ: 12 → ์ฌ๊ธฐ๋ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ทธ๋ฅ Int ํ์ ์
Array / Set / Dictionary
โท Array(๋ฐฐ์ด)
- ๋์ผํ ํ์
์ ์์๋ค์ ์ ์ฅํ๋ ์์๊ฐ ์๋ ์ปฌ๋ ์
์ด๋ค.
- ํน์ ์์์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ ๊ทผํ๊ณ ์์ ํ ์ ์์ผ๋ฉฐ, ๋ฐฐ์ด์ ํฌ๊ธฐ๋ ๋์ ์ผ๋ก ์กฐ์ ๋๋ค.
- ์ธ๋ฑ์ค(index)๋ 0๋ถํฐ ์์ํ๋ค.
- ์ฒ์ ์ ์ธํ ๋ ๋ฐฐ์ด์ ๊ธธ์ด๋ฅผ ๋ฏธ๋ฆฌ ์ง์ ํ์ง ์์๋ ๋๋ค.
ex. <1 - ํ์
์ถ๋ก ์ผ๋ก ์์ฑํ๊ธฐ>
var arrayA = [1, 2, 3]
var arrayB = [ ] ← error! ํ์
์ถ๋ก ์ผ๋ก๋ ๋น ๋ฐฐ์ด ์์ฑ์ด ๋ถ๊ฐํจ.
ex. <2 - ํ์
Annotation์ผ๋ก ์์ฑํ๊ธฐ>
var arrayC: [Int] = [1, 2, 3]
var arrayD: [Int] = [ ] ← ๋น ๋ฐฐ์ด ์์ฑ
ex. <3 - ์์ฑ์๋ก ์์ฑํ๊ธฐ>
var arrayE = Array<Int>()
var arrayF = [Int] ()
var arrayG = [Int](repeating: 0, count: 10) ← ์์ฑ๊ณผ ๋์์ 10๊ฐ element ์์ฑ ๋ฐ 0์ผ๋ก ์ด๊ธฐํ
<์์ฑ์ผ๋ก ์ ๊ทผํ๊ธฐ>
arrayA.first // → Optional(1)
arrayA.last // → Optional(3)
<Subscript๋ก ๋ณ๊ฒฝํ๊ธฐ>
var arrayA = [1, 2, 3]
arrayA[0] = 10 // → [10, 2, 3]
arrayA[0...2] = [10, 20, 30] // → [10, 20, 30]
arrayA[0...2] = [0] // → [0]
arrayA[0..<1] = [ ] // → [ ]
<replaceSubrange๋ก ๋ณ๊ฒฝํ๊ธฐ(๋ฒ์)>
var arrrayB = [1, 2, 3]
arrayB.replaceSubrange(0...2, with: [10, 20, 30]) // → [10, 20, 30]
arrayB.replaceSubrange(0...2, with: [0]) // → [0]
arrayB.replaceSubrange(0..<1, with: [ ]) // → [ ]
<๋ฐฐ์ด ์ ๋ ฌํ๊ธฐ>
โ sort : "์ค๋ฆ์ฐจ์"
โก sort + ํด๋ก์ : "๋ด๋ฆผ์ฐจ์"
โข sorted : ์๋ณธ์ ๊ทธ๋๋ก ๋๊ณ , "์ค๋ฆ์ฐจ์" ์ ๋ ฌ์ ์๋ก์ด ๋ฐฐ์ด์ ๋ง๋ค์ด ๋ฆฌํด
โฃ sorted + ํด๋ก์ : ์๋ณธ์ ๊ทธ๋๋ก ๋๊ณ , "๋ด๋ฆผ์ฐจ์" ์ ๋ ฌ์ ์๋ก์ด ๋ฐฐ์ด์ ๋ง๋ค์ด ๋ฆฌํด
ex)
let arrayA = [1, 5, 3, 8, 6, 10, 14]
arrayA.sort() // → [1, 3, 5, 6, 8, 10, 14]
arrayA.sort(by: >) // → [14, 10, 8, 6, 5, 3, 1]
let sortedArray = arrayA.sorted() // → [1, 3, 5, 6, 8, 10, 14]
let sortedArray2 = arrayA.sorted(bt: >) // → [14, 10, 8, 6, 5, 3, 1]
โท Set(์ธํธ)
- ์งํฉ
- ์์๋ฅผ ์ ์ํ์ง ์๊ณ ๋์ผํ ํ์
์ ๊ฐ์ ์ ์ฅํ๋ค.
- ํญ๋ชฉ์ ์์๊ฐ ์ค์ํ์ง ์๊ฑฐ๋ ํญ๋ชฉ์ด ํ ๋ฒ๋ง ํ์๋๋๋ก ํด์ผ ํ๋ ๊ฒฝ์ฐ,
๋ฐฐ์ด ๋์ ์งํฉ์ ์ฌ์ฉํ ์ ์๋ค.
- ์ธํธ ์์ ์๋ ๋ชจ๋ ๊ฐ์ ๊ณ ์ ํด์ผํ๋ฏ๋ก ์ค๋ณต์ ํ์ฉํ์ง ์๋๋ค.
โท Dictionary(๋์
๋๋ฆฌ)
- ์ฌ์
- ์์๋ฅผ ์ ์ํ์ง ์๊ณ ๊ฐ์ ํ์
์ key์ ๊ฐ์ ํ์
์ value๋ฅผ ์ ์ฅํ๋ค.
โ key๋ ์ค๋ณต๋ ์ ์๋ค.
โก ๋ชจ๋ key๋ ๊ฐ์ ํ์
์ด์ด์ผ ํ๋ค.
โข ๋ชจ๋ value๋ ๊ฐ์ ํ์
์ด์ด์ผ ํ๋ค.
โฃ key์ value๋ ๋ค๋ฅธ ํ์
์ด์ด๋ ๋๋ค.
- ์์๊ฐ ์๋ ์๋ณ์ ๊ธฐ์ค์ผ๋ก ๊ฐ์ ์ฐพ์ ๋ Dictionary๋ฅผ ์ฌ์ฉํ๋ค.
var baoFamily: [String: String] = ["name": "Fubao", "age": "Three"]
panda.keys // → ["name", "age"]
panda.values // → ["Fubao", "Three"]
panda.keys.sorted() // → ["age", "name"]
panda.values.sorted() // → ["Fubao", "Three"]
______________________________________________________________
// ํด๋น key๊ฐ ์๋ค๋ฉด value๋ฅผ ๋ฎ์ด์ฐ๊ณ , ๊ธฐ์กด์ ๊ฐ์ ๋ฐํ
let newPanda = panda.updateValue("Hello Aibao", forKey: "name")
print(newPanda) // → Optional("Fubao")
print(panda["name"]) // → Optional("Hello Aibao")
______________________________________________________________
// ํด๋น key๊ฐ ์๋ค๋ฉด ๊ทธ์ ํด๋นํ๋ value์ ๊ฐ์ ์ถ๊ฐํ๊ณ , nil์ ๋ฐํ
panda["address"] = "์ฉ์ธ์"
panda["address"] = nil
let newAddress = panda.updateValue("Hello Everland", forKey: "address")
print(newAddress) // → nil
print(panda["address"]) // → Optional("Hello Everland")
'iOS ์ฑ ๊ฐ๋ฐ ์ข ํฉ๋ฐ > TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
2์ฃผ์ฐจ_Swift ๋ฌธ๋ฒ ๊ธฐ์ด ๊ณผ์ _๊ณ์ฐ๊ธฐ ๋ง๋ค๊ธฐ (0) | 2024.03.07 |
---|---|
2์ฃผ์ฐจ_Swift ๋ฌธ๋ฒ์ข ํฉ๋ฐ ๊ธฐ์ด_(3์ผ์ฐจ) (0) | 2024.03.06 |
2์ฃผ์ฐจ_Swift ๋ฌธ๋ฒ์ข ํฉ๋ฐ ๊ธฐ์ด_(1์ผ์ฐจ) (0) | 2024.03.04 |
1์ฃผ์ฐจ(3) - ๋ฐ์ดํฐ ๊ด๋ฆฌ / ํ ์ด๋ธ ๋ทฐ(Table View) / ๋ค๋น๊ฒ์ด์ (2) | 2024.02.29 |
1์ฃผ์ฐจ(2) - Swift ๊ธฐ๋ณธ ๋ฌธ๋ฒ / ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ๋ก์ง ์ฐ๊ฒฐ (2) | 2024.02.28 |