๐Ÿ“š Programming/Swift

    [Swift] .\self ? ํ‚ค๊ฒฝ๋กœ ํ†บ์•„๋ณด๊ธฐ (KeyPath)

    [Swift] .\self ? ํ‚ค๊ฒฝ๋กœ ํ†บ์•„๋ณด๊ธฐ (KeyPath)

    forEach์—์„œ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” .\self ๋ฌด์Šจ ์˜๋ฏธ์ผ๊นŒ ? KeyPath ํ‚ค ๊ฒฝ๋กœ๋Š” ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’์„ ๋ฐ”๋กœ ๊ฐ€์ ธ์˜ค์ง€ ์•Š๊ณ  ์–ด๋–ค ํ”„๋กœํผํ‹ฐ์˜ ์œ„์น˜๋งŒ ์ฐธ์กฐํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ธ€๋กœ๋Š” ์„ค๋ช…ํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฐœ๋…์ธ๊ฒƒ ๊ฐ™๋‹ค. ๋ฐ”๋กœ ์˜ˆ์ œ๋ฅผ ๋ณด์ž ! Swift๋Š” ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ํ•จ์ˆ˜๊ฐ€ ์ผ๊ธ‰๊ฐ์ฒด์˜ ์—ญํ• ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋„ˆ๋ฌด ์œ ๋ช…ํ•œ ์˜ˆ์ œ..์ธ๋ฐ ์ด๋ ‡๊ฒŒ ๋ณ€์ˆ˜๋กœ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ์ฐธ์กฐ๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ! func someFunction(paramA: Any, paramB: Any){ print("SomeFunction called...") } var functionReference = someFunction(paramA:paramB:) functionReference("A","B") // someFuncti..

    [Swfit] ํ”„๋กœํผํ‹ฐ ๊ฐ์‹œ์ž / property observer (willSet & didSet)

    [Swfit] ํ”„๋กœํผํ‹ฐ ๊ฐ์‹œ์ž / property observer (willSet & didSet)

    Property Observer ํ”„๋กœํผํ‹ฐ ๊ฐ’์˜ ๋ณ€ํ™”๋ฅผ ๊ด€์ฐฐํ•˜๊ณ , ์ €์žฅ ํ”„๋กœํผํ‹ฐ์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค. willSet, didSet์œผ๋กœ ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’ ๋ณ€ํ™”ํ•  ๋•Œ ํ˜ธ์ถœ๋จ -> ๊ฐ’์˜ ๋ณ€ํ™”๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•  ์ˆ˜ ์žˆ๋‹ค. ๐Ÿ“Œ ์™œ, ์–ธ์ œ ์‚ฌ์šฉํ•˜๋Š”์ง€ ? ์ฃผ๋กœ iOS๊ฐœ๋ฐœ์—์„œ UI๋ฅผ ์—…๋ฐ์ดํŠธ ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. willSet ๊ฐ’์ด ์ €์žฅ๋˜๊ธฐ ์ง์ „์— ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. willSet์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ๋ฐ”๋€Œ๊ฒŒ ๋  ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. var fruit : String = "apple" { willSet(newFruit){ print("๊ณผ์ผ์ด \(fruit)์—์„œ \(newFruit)์œผ๋กœ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.") } } ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ newValue๋กœ ์ž๋™ ์ง€์ • ๋ฉ๋‹ˆ๋‹ค. var fruit : String = "apple" { will..

    [Swift] ์˜ต์…”๋„ ์ฒด์ด๋‹

    [Swift] ์˜ต์…”๋„ ์ฒด์ด๋‹

    ๐Ÿ“Œ ์˜ต์…”๋„ ์ฒด์ด๋‹ ์˜ต์…”๋„ ์ฒด์ด๋‹์€ ๊ตฌ์กฐ์ฒด๋‚˜, ํด๋ž˜์Šค ์˜ต์…”๋„์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ๊ทธ ์˜ต์…”๋„์ด ๋˜ ์˜ต์…”๋„์„ ๊ฐ€์งˆ ๋•Œ ์ฆ‰, ์—ฐ์‡„์ ์œผ๋กœ ์˜ต์…”๋„์„ ๊ฐ€์ง€๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด ์•„๋ž˜์™€ ๊ฐ™์€ ํด๋ž˜์Šค๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜์ž. // ๊ฐœ์ธ์ •๋ณด class Person { var name : String var age : Int var phone : Phone? init(name : String, age : Int){ self.name = name self.age = age } } // ํฐ์ •๋ณด class Phone { var number : String var type : Kind? init(number : String){ self.number = number } } // ํฐ์ข…๋ฅ˜ class Kind { var brand : St..

    [Swift] class ์ƒ์†(Inheritance)

    [Swift] class ์ƒ์†(Inheritance)

    ์ƒ์†์€ ์˜ค๋กœ์ง€ 'ํด๋ž˜์Šค' ์—์„œ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค. swift์—์„œ ์ƒ์†์€ ํ•œ ๋ฒˆ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค. (== ๋‹จ์ผ์ƒ์†) ๐Ÿ“Œ ๊ธฐ๋ณธ๊ตฌํ˜„ class Name : ์ƒ์†๋ฐ›์„class { // code } ๐Ÿ“Œ ์ƒ์† ์ƒ์†์„ ์˜ˆ์ œ๋ฅผ ์•ž์„ธ์›Œ ์„ค๋ช…ํ•ด๋ณด๋ฉด, ์ด๋ฆ„๊ณผ ๋‚˜์ด๋ฅผ ํ”„๋กœํผํ‹ฐ๋กœ ๊ฐ€์ง€๊ณ , ๊ทธ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์ง€๋Š” ํด๋ž˜์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. class Info { var name = "" var age = "" func print_name() { print("๋‚ด ์ด๋ฆ„์€ \(name) ์ž…๋‹ˆ๋‹ค.") } func print_age() { print("๋‚˜๋Š” \(age)์‚ด ์ž…๋‹ˆ๋‹ค.") } } ์œ„ ํด๋ž˜์Šค์˜ ์ •๋ณด๋ฅผ ๋ชจ๋‘ ๊ฐ€์ง€๋ฉด์„œ ์™ธ๊ตญ์–ด๋กœ๋„ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๊ณ ์‹ถ๋‹ค๋ฉด ์ƒ์†์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, ์ƒ์†์ด๋ž€ ๋‹ค๋ฅธ ํด๋ž˜์Šค์˜ ์ •๋ณด๋ฅผ ๋ชจ๋‘ ๊ฐ€์ง€๋Š” ๊ฒƒ์„ ์˜๋ฏธ..

    [Swift] property(ํ”„๋กœํผํ‹ฐ)

    [Swift] property(ํ”„๋กœํผํ‹ฐ)

    ํ•ด๋‹น ํฌ์ŠคํŒ…์€ ์•„๋ž˜ ๋งํฌ์—์„œ ๊ฐ’ํƒ€์ž… & ์ฐธ์กฐํƒ€์ž…์„ ๋จผ์ € ํ•™์Šตํ•œ ํ›„์— ์ฝ๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. https://990427.tistory.com/71 ์ „ ๊ฒŒ์‹œ๋ฌผ๋“ค์—์„œ ํด๋ž˜์Šค๋‚˜ ๊ตฌ์กฐ์ฒด์— ์“ฐ๋Š” ๋ณ€์ˆ˜๋‚˜ ์ƒ์ˆ˜๋ฅผ ํ”„๋กœํผํ‹ฐ๋ผ๊ณ  ๋ถˆ๋ €์—ˆ๋‹ค. ํ”„๋กœํผํ‹ฐ๋ž€ ํด๋ž˜์Šค, ๊ตฌ์กฐ์ฒด, ์—ด๊ฑฐํ˜•์— ๊ด€๋ จ๋œ ๊ฐ’์„ ๋œปํ•œ๋‹ค. (๋Œ€์ถฉ ์œ„์—๋ง๋„ ๋งž์Œ) ํ”„๋กœํผํ‹ฐ๋Š” ์ด 3๊ฐ€์ง€ ํ˜•ํƒœ๋กœ ์กด์žฌํ•˜๋Š”๋ฐ, ํ•˜๋‚˜์”ฉ ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž. Stored Property (์ €์žฅ ํ”„๋กœํผํ‹ฐ) ์ €์žฅ ํ”„๋กœํผํ‹ฐ๋Š” ๋ง ๊ทธ๋Œ€๋กœ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ํ”„๋กœํผํ‹ฐ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์ตํžˆ ์•Œ๊ณ ์žˆ๋Š” class, struct์•ˆ์— ์กด์žฌํ•˜๋Š” ๋ณ€์ˆ˜๋‚˜ ์ƒ์ˆ˜๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ €์žฅ ํ”„๋กœํผํ‹ฐ์ด๋‹ค. class ex1 { let num = 0 var str = "hello" } struct ex2 { var num = 1 let..

    [Swift] ํด๋กœ์ €(Closure)์˜ ๋ชจ๋“ ๊ฒƒ

    [Swift] ํด๋กœ์ €(Closure)์˜ ๋ชจ๋“ ๊ฒƒ

    ๋ณธ ๊ฒŒ์‹œ๋ฌผ์€ ํด๋กœ์ €์˜ ๊ธฐ๋ณธ ๋ถ€ํ„ฐ ์‹ฌํ™”๊นŒ์ง€ ๋ชจ๋‘ ๋‹ค๋ฃจ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. swift ํ•จ์ˆ˜์˜ ๊ธฐ๋ณธ์„ ๋‹ค๋ฃจ์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. Closure / ํด๋กœ์ € ํด๋กœ์ €๋ž€? ๋ณดํ†ต์€ ์ต๋ช…ํ•จ์ˆ˜๋ฅผ ๋œปํ•œ๋‹ค. ํ•˜์ง€๋งŒ named ํ•จ์ˆ˜๋„ ํด๋กœ์ €์— ์†ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค ! ํด๋กœ์ €๋Š” named Closure & unnamed Closure ๋‘๊ฐ€์ง€๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์•Œ๊ณ  ์žˆ๋Š” ์ผ๋ฐ˜์ ์ธ ํ•จ์ˆ˜๋Š” named Closure์ด๋‹ค. func NameClosure() { print("I have a name") } ์ต๋ช…ํ•จ์ˆ˜๋Š” ์ •ํ™•ํžˆ๋Š” unnamed Closure์ด์ง€๋งŒ, ๋ณดํ†ต unnamed์„ ์ƒ๋žตํ•˜๊ณ  ๊ทธ๋ƒฅ ํด๋กœ์ €๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ์ฆ‰, ํด๋กœ์ € = ์ต๋ช…ํ•จ์ˆ˜๋ผ๊ณ  ํ†ต์ƒ์ ์œผ๋กœ ์ƒ๊ฐํ•˜๋ฉด ๋ ๋“ฏ ? ( ํด๋กœ์ €๋Š” ์ต๋ช…ํ•จ์ˆ˜์ด์ง€๋งŒ, 1๊ธ‰ ๊ฐ์ฒด ํ•จ์ˆ˜์˜ ํŠน์„ฑ์„ ๊ฐ€์ง„๋‹ค. ) ์š”..

    [Swift] ์—ด๊ฑฐํ˜•(Enumerations)

    ๋ณดํ˜ธ๋˜์–ด ์žˆ๋Š” ๊ธ€์ž…๋‹ˆ๋‹ค.

    [Swift] ์ œ์–ด๋ฌธ (์กฐ๊ฑด๋ฌธ / ๋ฐ˜๋ณต๋ฌธ)

    [Swift] ์ œ์–ด๋ฌธ (์กฐ๊ฑด๋ฌธ / ๋ฐ˜๋ณต๋ฌธ)

    ์กฐ๊ฑด๋ฌธ if-else ๋‹ค๋ฅธ if๋ฌธ๊ณผ ํ˜•์‹์€ ๊ฐ™๋‹ค. var num = 0 if num == 0 { //code } else if num == 10 { //code } else{ //code } ๋‹ค๋ฅธ์ ์€ ์กฐ๊ฑด์ด ๋ฌด์กฐ๊ฑด Bool type์ด์—ฌ์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ฆ‰, ์ˆซ์ž 0์€ false์ด๊ณ , ๋‚˜๋จธ์ง€๋Š” true ๋ผ๋Š” ๋‹ค๋ฅธ ์–ธ์–ด์˜ ํŠน์„ฑ์„ ์ง€๋‹ˆ์ง€ ์•Š๋Š”๋‹ค. // error code var num = 0 if num { //code } switch ๋‹ค๋ฅธ ์–ธ์–ด์˜ switch์™€๋Š” ๋‹ฌ๋ฆฌ break๋ฅผ ๋ช…์‹œํ•˜์ง€ ์•Š์•„๋„ ๋จ case์—์„œ ๋‹ค๋ฃจ์ง€ ์•Š๋Š” ๋ฒ”์œ„๊ฐ€ ์žˆ๋Š” ํ•œ default ๋ถ€๋ถ„์€ ๊ผญ ์จ์ฃผ๊ธฐ var num = 10 switch num { case 10: print("ten") default: print("not ten") } ..

    [Swift] function / ํ•จ์ˆ˜

    [Swift] function / ํ•จ์ˆ˜

    1. ํ•จ์ˆ˜์„ ์–ธ ๊ธฐ๋ณธ func ํ•จ์ˆ˜์ด๋ฆ„ (๋ณ€์ˆ˜ : type, ๋ณ€์ˆ˜ : type) -> return_type { //code return value } //ex (๋”ํ•˜๊ธฐ ํ•จ์ˆ˜) func add (a : Int, b : Int ) -> Int { return a+b } return โŒ func name(a: Int, b: Int) -> Void { //code } func name(a: Int, b: Int) { //code } ๋งค๊ฐœ๋ณ€์ˆ˜ โŒ func name() -> return_type { //code return } 2. ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ธฐ๋ณธ๊ฐ’ ๐Ÿ“Œ ๋ณ€์ˆ˜ : type = ๊ธฐ๋ณธ๊ฐ’ func add(a : Int, b: Int = 10) -> Int { // b๊ธฐ๋ณธ๊ฐ’ = 10 return (a+b) } ๊ธฐ๋ณธ๊ฐ’์„ ์„ค์ •ํ•˜๋ฉด..

    [Swift] collection type / ์ปฌ๋ ‰์…˜ ํƒ€์ž…

    [Swift] collection type / ์ปฌ๋ ‰์…˜ ํƒ€์ž…

    1. Array ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ์ปฌ๋ ‰์…˜ ์„ ์–ธํ•˜๋Š” ๋ฐฉ๋ฒ• var intArray : Array = Array() var intArray : Array = [] var intArray : [Int] = Array() var intArray : [Int] = [] var intArray = [Int]() ํ™œ์šฉ var intArray : Array = [] intArray.append(1) // 1์„ ์‚ฝ์ž…ํ•œ๋‹ค. intArray.contains(1) // 1์ด ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธ => true intArray.remove(at:0) // 0๋ฒˆ์งธ index ๊ฐ’ ์ œ๊ฑฐ intArray.removeLast() intArray.removeAll() intArray.count // ๊ธธ์ด ๋ฐ˜ํ™˜ intArray[0] // 0๋ฒˆ์งธ ind..