๐ŸŽ iOS

    [Swift] self

    self.ํ”„๋กœํผํ‹ฐ๋ช… // ํด๋ž˜์Šค๋‚˜ ๊ตฌ์กฐ์ฒด ์ž์‹ ์˜ ์ธ์Šคํ„ด์Šค์— ์†ํ•œ ํ”„๋กœํผํ‹ฐ self ํ‚ค์›Œ๋“œ๋Š” ์ƒ๋žต์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ๋งŒ์•ฝ ํ”„๋กœํผํ‹ฐ์™€ ์ผ๋ฐ˜ ๋ณ€์ˆ˜์˜ ์ด๋ฆ„์ด ๊ฐ™์„ ๊ฒฝ์šฐ ๊ตฌ๋ถ„์„ ์œ„ํ•ด์„œ self๋ฅผ ๊ผญ ์จ์ฃผ์–ด์•ผํ•œ๋‹ค. class A { var name: String init(name: String) { self.name = name } } ์ด๋‹ˆ์…œ๋ผ์ด์ € ๋‚ด๋ถ€์— ์žˆ๋Š” name ์€ ์ง€์—ญ๋ณ€์ˆ˜ > ๋งค๊ฐœ๋ณ€์ˆ˜ > ์ธ์Šคํ„ด์Šค ํ”„๋กœํผํ‹ฐ ์ˆœ์„œ๋กœ ๋ฌด์—‡์„ ์ง€์นญํ•˜๋Š”์ง€ ์ฐพ์Œ. ๊ทธ๋ž˜์„œ name = name ์˜ ๊ฒฝ์šฐ ๋‘๊ฐœ ๋‹ค ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ง€์นญํ•˜๊ฒŒ ๋จ. ์ด๋•Œ, ์ธ์Šคํ„ด์Šค ํ”„๋กœํผํ‹ฐ๋กœ ์ง€์นญํ•˜๊ธฐ ์œ„ํ•ด์„œ self๋ฅผ ์‚ฌ์šฉํ•จ.

    [Swift] Guard๋ฌธ๊ณผ If๋ฌธ

    guard์™€ if์˜ ์ฐจ์ด๋Š” guard๋Š” ํ•ญ์ƒ else๋ฌธ์„ ๊ฐ–๋Š”๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ⇒ else๋ฌธ์„ ๊ฐ•์ œํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ˆ์™ธ์ฒ˜๋ฆฌ์— ์šฉ์ดํ•˜๋‹ค! func guardTest(person: [String: String]) { guard let name = person["name"] else { // else ๋ฅผ ์•ˆ์“ฐ๋ฉด compile error print("person is nil") return } print("Name: \\(name)") guard let location = person["location"] else { print("location is nil") return } print("Location: \\(location)") } guardTest(person: ["name": "Jedi"]) print() g..

    [Error] Missing Info.plist value. A value for the Info.plist key 'CFBundleIconName' is missing in the bundle '{bundleid}'.

    App Store Connect์— ์•ฑ ์‹ฌ์‚ฌ๋ฅผ ์˜ฌ๋ฆฌ๊ธฐ ์œ„ํ•ด Xcode Project๋ฅผ Archive ํ•˜๋ ค๊ณ  ํ•˜์˜€์œผ๋‚˜ Upload ๋„์ค‘ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋‚˜ํƒ€๋‚ฌ๋‹ค. Missing Info.plist value. A value for the Info.plist key 'CFBundleIconName' is missing in the bundle '{bundleid}'. Apps built with iOS 11 or later SDK must supply app icons in an asset catalog and must also provide a value for this Info.plist key. For more information see http://help.apple.com/xcode/mac/cu..

    [Swift] reduce ์‚ฌ์šฉํ•˜๊ธฐ | sum

    Programmers ํ•˜์ƒค๋“œ ์ˆ˜๋ฅผ ํ’€๊ณ ๋‚˜์„œ, reduce๋ฅผ ์ด์šฉํ•œ ํ’€์ด๋ฅผ ๋งˆ์ฃผ์ณ๋ฒ„๋ ธ๋‹ค. // Programmers ํ•˜์ƒค๋“œ ์ˆ˜ ํ’€์ด func solution(_ x:Int) -> Bool { var sum_x = String(x).map{ Int(String($0))! }.reduce(0, +) return x % sum_x == 0 } ใ…‡ใ…‡.. ๋‚˜๋„ ๊ณต๋ถ€ํ•ด์ค„๊ฒŒ reduce ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์˜ ๊ฐ’์„ ํ•˜๋‚˜๋กœ ํ†ตํ•ฉ(์—ฐ์‚ฐ)ํ•˜์—ฌ return * Swift์—์„œ๋Š” Python๊ณผ๋Š” ๋‹ฌ๋ฆฌ ๋ฐฐ์—ด์˜ ์ด ํ•ฉ์„ ๊ตฌํ•˜๋Š” ๋‚ด์žฅ ํ•จ์ˆ˜ sum์ด ์—†๋‹ค. ๋Œ€์‹  reduce๋ฅผ ์‘์šฉํ•ด์ฃผ๋ฉด ๋œ๋‹ค. (1) reduce(_: _:) public func reduce(_ initialResult: Result, _ nextPartialResult: (..

    [Swift] map, flatMap, compactMap ?

    Map, flatMap, compactMap map ๋ฐฐ์—ด ๋‚ด๋ถ€์˜ ๊ฐ’์„ ํ•˜๋‚˜์”ฉ mapping ๊ฐ ์š”์†Œ์— ๋Œ€ํ•œ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋“ค์„ ๋ฐฐ์—ด์˜ ์ƒํƒœ๋กœ ๋ฐ˜ํ™˜ func map(_ transform: (String) throws -> T) rethrows -> [T] import Foundation let cast = ["Vivien", "Marlon", "Kim", "Karl"] let lowercaseNames = cast.map { $0.lowercased() } print(lowercaseNames) // ["vivien", "marlon", "kim", "karl"] let letterCounts = cast.map{ $0.count } print(letterCounts) // [6..

    [Swift] inout? | ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์ง€์†ํ•˜๊ธฐ

    What is inout? Swift์—์„œ ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ์ƒ์ˆ˜์ด๋ฏ€๋กœ ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๊ฐ’์„ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€ ํ•จ์ˆ˜์—์„œ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๊ธธ ์›ํ•˜๊ณ  + ๋ณ€๊ฒฝ๋œ ๊ฐ’์ด ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ์ข…๋ฃŒ๋œ ํ›„์—๋„ ์ง€์†๋˜๊ธธ ์›ํ•  ๋•Œ inout ์‚ฌ์šฉ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ณ€์ˆ˜์˜ ์ฃผ์†Œ๊ฐ’์„ ๋„˜๊ฒจ ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ func increment(_ number: Int){ number += 1 print(number) } increment(3) // Error: 'number' is a 'let' constant var number = 3 func increment(_ number: inout Int){ number += 1 print(number) } increment(&number) // 4 How to use inout?..

    [iOS] ์Šคํ† ๋ฆฌ๋ณด๋“œ ์—†๋Š” ํ™˜๊ฒฝ ๊ตฌ์ถ•ํ•˜๊ธฐ | No-storyboard

    ํ•ญ์ƒ ์Šคํ† ๋ฆฌ๋ณด๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•ด์™”๋Š”๋ฐ ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์Šคํ† ๋ฆฌ๋ณด๋“œ ์—†์ด ์ง„ํ–‰ํ•˜๊ณ ์ž ํ•œ๋‹ค. ์–ด์ฐจํ”ผ UIKit๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋•Œ๋ฌธ์— ๋‹ค ๋˜‘๊ฐ™์ง€๋งŒ, ๊ธฐ๋ณธ์ ์œผ๋กœ storyboard ์…‹ํŒ…์ด ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์—ฐ๊ฒฐ๋งŒ ๋Š์–ด์ฃผ๋ฉด ๋œ๋‹ค. (Step 1) ์Šคํ† ๋ฆฌ๋ณด๋“œ ํ”„๋กœ์ ํŠธ์™€ ๋˜‘๊ฐ™์€ ์„ค์ •์œผ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•ด์ค€๋‹ค. (Step 2) ์™ผ์ชฝ์˜ Navigator์—์„œ Main.storyboard๋ฅผ ์‚ญ์ œํ•ด์ค€๋‹ค. (Step 3) Project > Targets > General > Deployment Info ์—์„œ Main Interface์— ์„ค์ •๋˜์–ด์žˆ๋Š” Main.Storyboard๋ฅผ ์‚ญ์ œํ•ด์ค€๋‹ค. (Step 4) Project > Targets > Info ์—์„œ Storboard Name์„ ์‚ญ์ œํ•ด์ค€๋‹ค. (Step 5) Scen..

    [iOS] App States & View Life Cycle | ์•ฑ์˜ ์ƒํƒœ์™€ ๋ทฐ์˜ ์ƒ๋ช…์ฃผ๊ธฐ

    ์ƒ๋ช…์ฃผ๊ธฐ(Lifecycle)์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€? ⇒ ์–ธ์ œ ํŠน์ • ๋กœ์ง์„ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฅผ ์–ด๋””์„œ ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค๋ผ๋Š” ๋ฌธ์ œ๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ๋Š” ๊ฐœ๋… App States Not running: ์•ฑ์ด ์‹คํ–‰๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ์ข…๋ฃŒ๋œ ์ƒํƒœ Foreground: ํ™”๋ฉด์ด ๋‚˜ํƒ€๋‚œ ์ƒํƒœ inActive: ์ƒํ˜ธ์ž‘์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ์ƒํƒœ, ํ™”๋ฉด์€ ๋ณด์ž„ ex) ์ „ํ™”๊ฐ€ ์™”์„ ๋•Œ, ์‹œ์Šคํ…œ ๋ฉ”์‹œ์ง€๊ฐ€ ๋–ด์„ ๋•Œ ('๋ฐฐํ„ฐ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค') Active: ์ƒํ˜ธ์ž‘์šฉ์ด ๊ฐ€๋Šฅํ•œ ์ƒํƒœ, ์•ฑ์ด ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ์ƒํƒœ Background: ํ™”๋ฉด์ด ์‚ฌ๋ผ์ง„ ์ƒํƒœ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ƒํƒœ์—์„œ ์‹ค์งˆ์ ์ธ ๋™์ž‘์„ ํ•˜๊ณ  ์žˆ๋Š” ์ƒํƒœ ex) ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ, ์œ ํŠœ๋ธŒ ์Œ์•… ์‹คํ–‰ Suspended: ๋ญ”๊ฐ€ ์žก์•„๋‘” ์ƒํƒœ ๋น ๋ฅธ ์žฌ์‹คํ–‰์„ ์œ„ํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ตœ์†Œํ•œ์œผ๋กœ๋งŒ ์žก๊ณ (ํ• ๋‹นํ•˜๊ณ ) ์žˆ์Œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•˜๋ฉด ์‹œ์Šคํ…œ์ด Suspe..