swift TableView & CollectionView

์œ ์˜ˆ๋ฆฌยท2022๋…„ 4์›” 4์ผ
0

UMC

๋ชฉ๋ก ๋ณด๊ธฐ
4/7
post-thumbnail

๐Ÿ‘ฉ๐Ÿปโ€๐Ÿซ ์˜ค๋Š˜์˜ ํ•™์Šต๋ชฉํ‘œ ๐Ÿ‘จ๐Ÿปโ€๐Ÿซ

  1. Protocol์˜ ๊ฐœ๋…์„ ์ดํ•ดํ•œ๋‹ค.
  2. Datasource์™€ Delegate์˜ ๊ฐœ๋…์„ ์ดํ•ดํ•œ๋‹ค.
  3. TableView์™€ CollectionView๊ฐ€ ๋ฌด์—‡์ด๋ฉฐ, ์–ธ์ œ ํ™œ์šฉ๋˜๋Š”์ง€ ์ดํ•ดํ•œ๋‹ค.

๐Ÿ”…KEYWORD๐Ÿ”…

1๏ธโƒฃ ํ”„๋กœํ† ์ฝœ ์ง€ํ–ฅ ์–ธ์–ด

์• ํ”Œ์€ ์ด์ œ ๋”์ด์ƒ ๊ฐ์ฒด์ง€ํ–ฅํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ์•„๋‹ˆ์—ˆ๋„ค...

  • ์• ํ”Œ์€ 2015๋…„ 9์›”, ์Šค์œ„ํ”„ํŠธ ๋ฒ„์ „ 2.0์„ ๋ฐœํ‘œํ•˜๋ฉด์„œ ์ง€๋‚œ ์ˆ˜์‹ญ๋…„๊ฐ„ ์‚ฌ์šฉํ–ˆ๋˜ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OPP)์ด ์•„๋‹Œ ํ”„๋กœํ† ์ฝœ ์ง€ํ–ฅํ”„๋กœ๊ทธ๋ž˜๋ฐ(POP)์ด๋ผ๊ณ  ๋ฐœํ‘œํ–ˆ๋‹ค.
    -> ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด class๋ฅผ ํ†ตํ•œ OPP๊ฐ€ struct์™€ protocol์„ ํ†ตํ•œ POP์œผ๋กœ ๋ฐ”๋€Œ๊ณ  ์žˆ๋‹ค! ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋Ÿผ ์™œ ๊ฐ‘์ž๊ธฐ ํ”„๋กœํ† ์ฝœ ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ ๋ฐ”๊ฟจ๋Š”๋ฐ?

  1. ํ”„๋กœํ† ์ฝœ ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์ƒ์†์ด ํ•„์š”ํ•œ ํ”„๋กœ๊ทธ๋žจ์„ ์งค ๋•Œ๋„ clss๊ฐ€ ์•„๋‹Œ struct, enum์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋‹ˆ๊น!

-> ํด๋ž˜์Šค๋Š” ์ฐธ์กฐ ํƒ€์ž…์ด๋ฏ€๋กœ ์ฐธ์กฐ ์ถ”์ ์— ๋น„์šฉ์ด ๋งŽ์ด ๋ฐœ์ƒํ•œ๋‹ค. ๋น„๊ต์  ๋น„์šฉ์ด ์ ์€ ๊ฐ’ ํƒ€์ž…์„ ํ™œ์šฉํ•˜๊ณ  ์‹ถ์–ด๋„, ์ƒ์†์„ ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋•Œ๋งˆ๋‹ค ๊ธฐ๋Šฅ์„ ๋‹ค์‹œ ๊ตฌํ˜„ํ•ด ์ค˜์•ผํ–ˆ๋‹ค.

  1. ๊ธฐ๋Šฅ์˜ ๋ชจ๋“ˆํ™”๊ฐ€ ๋”์šฑ ๋ช…ํ™•ํ•ด ์ง„๋‹ˆ๊น!

-> ํด๋ž˜์Šค๊ฐ€ ์ƒ์†์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ ๋˜์–ด์žˆ์–ด๋„ ๋‹ค์ค‘์ƒ์†์„ ์ง€์›ํ•˜๋Š” ์–ธ์–ด๋Š” ๋งŽ์ง€ ์•Š๋‹ค. ๋‹ค์ค‘์ƒ์†์€ ํ•˜๋‚˜์˜ ์ƒ์†์ฒด๊ณ„์—์„œ ๋‹ค๋ฅธ ์ƒ์†์ฒด๊ณ„์— ์†ํ•ด์žˆ๋Š” ๊ธฐ๋Šฅ์„ ๋Œ์–ด๋‹ค ์“ธ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋œป.
ํ”„๋กœํ† ์ฝœ ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๊ธฐ๋Šฅ์„ ํ”„๋กœํ† ์ฝœ์ด๋ผ๋Š” ๋‹จ์œ„๋กœ ๋ฌถ์— ํ‘œํ˜„ํ•˜๊ณ  ์ดˆ๊ธฐ์— ๊ตฌํ˜„์„ ํ•ด ๋‘˜ ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ƒ์†์ด๋ผ๋Š” ํ•œ๊ณ„์ ์„ ํƒˆํ”ผํ–ˆ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ œ์•ฝ์—†์ด ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ€์ ธ์™€ ์“ธ ์ˆ˜ ์žˆ๋‹ค!

๋”๋‚˜์•„๊ฐ€์„œ class๋Š” ๋ชจ๋“  api์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ ๋ฐ˜๋ฉด Protocol์€ ์ •์˜ํ•œ api๋งŒ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋œ๋‹ค. ์ด๋Š” ๊ณง ๋” ๊ฐ€๋ณ๊ณ  ๋ณด์•ˆ์„ฑ ๋†’๊ฒŒ ์ฝ”๋“œ๋ฅผ ์งค ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•œ๋‹ค.

๊ทธ๋Ÿผ protocol์€ ๋ญ”๋ฐ?

ํŠน์ • ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์„œ๋“œ, ํ”„๋กœํผํ‹ฐ, ์ด๋‹ˆ์…œ๋ผ์ด์ € ๋“ฑ์˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ •์˜ํ•˜๋Š” ๊ฒƒ!

  • ๊ตฌ์กฐ์ฒด, ํด๋ž˜์Šค, ์—ด๊ฑฐํ˜•์€ ํ”„๋กœํ† ์ฝœ๋ฅผ ์ฑ„ํƒ(adopted)ํ•˜์—ฌ ํ”„๋กœํ† ์ฝœ์˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ์‹ค์ œ๋กœ ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•˜๋‹ค.
    ์–ด๋–ค ํ”„๋กœํ† ์ฝœ์˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋ชจ๋‘ ๋”ฐ๋ฅด๋Š” ํƒ€์ž…์€ ๊ทธ ํ”„๋กœํ† ์ฝœ์„ ์ค€์ˆ˜ํ•œ๋‹ค(Conform)๊ณ  ํ‘œํ˜„ํ•œ๋‹ค.
    ํ”„๋กœํ† ์ฝœ์˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ถฉ์กฑ์‹œํ‚ค๋ ค๋ฉด ํ”„๋กœํ† ์ฝœ์ด ์ œ์‹œํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋ชจ๋‘ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.
protocol ํ”„๋กœํ† ์ฝœ ์ด๋ฆ„ {
	์ •์˜๋ถ€
}
protocol Talkable {
  // ํ”„๋กœํผํ‹ฐ ์š”๊ตฌ >> ํ•ญ์ƒ var ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  var topic: String { get set }  // ์ฝ๊ธฐ ์“ฐ๊ธฐ ๋ชจ๋‘ ๊ฐ€๋Šฅํ•œ ํ”„๋กœํผํ‹ฐ
  var language: String { get }  // ์ฝ๊ธฐ๋งŒ ๊ฐ€๋Šฅํ•œ ํ”„๋กœํผํ‹ฐ

  // ๋ฉ”์„œ๋“œ ์š”๊ตฌ
  func talk()

 // ์ด๋‹ˆ์…œ๋ผ์ด์ € ์š”๊ตฌ
  init(topic: String, language: String)
}
  • ํ”„๋กœํ† ์ฝœ์€ ๋‹ค์ค‘์ƒ์†์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
protocol ํ”„๋กœํ† ์ฝœ ์ด๋ฆ„: ๋ถ€๋ชจ ํ”„๋กœํ† ์ฝœ ์ด๋ฆ„ ๋ชฉ๋ก {
  ์ •์˜๋ถ€
}
  • ์›๋ž˜ ํ”„๋กœํ† ์ฝœ์—๋Š” ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฝ”๋“œ๋Š” ์ž‘์„ฑํ•  ์ˆ˜ ์—†์—ˆ๋Š”๋ฐ swift2 protocol extension์—๋Š” ์‹ค์ œ ๊ฐ’์„ ๊ณ„์‚ฐํ•˜๊ณ , ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค. ์ฆ‰, extension์„ ํ†ตํ•ด protocol์˜ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ด์ง€๊ฒŒ ๋œ ๊ฒƒ์ด๋‹ค.
protocol Talkable {
    var topic: String { get set }
    func talk(to: Self)
}

struct Person: Talkable {
    var topic: String
    var name: String

    func talk(to: Person) {
        print("\(topic)์— ๋Œ€ํ•ด \(to.name)์—๊ฒŒ ์ด์•ผ๊ธฐํ•ฉ๋‹ˆ๋‹ค")
    }
}

-> ์œ„ ์ฝ”๋“œ๋ฅผ ์•„๋ž˜์™€ ๊ฐ™์ด ํ•œ๊บผ๋ฒˆ์— ๊ตฌํ˜„ํ•œ๋‹ค๋ฉด ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

protocol Talkable {
    var topic: String { get set }
    func talk(to: Self)
}

// ์ต์Šคํ…์…˜์„ ์‚ฌ์šฉํ•œ ํ”„๋กœํ† ์ฝœ ์ดˆ๊ธฐ ๊ตฌํ˜„
extension Talkable {
    func talk(to: Self) {
        print("\(to)! \(topic)")
    }
}

2๏ธโƒฃ ArrayList

Array๋Š” swift์˜ ์ปฌ๋ ‰์…˜ ํƒ€์ž… ์ค‘ ํ•˜๋‚˜์ด๋‹ค.

์ปฌ๋ ‰์…˜ ํƒ€์ž…์—๋Š” array, set, dictionary ์„ธ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

  • array: ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ๋ฆฌ์ŠคํŠธ ์ปฌ๋ ‰์…˜
  • dictionary: ํ‚ค์™€ ๊ฐ’์˜ ์Œ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ์ปฌ๋ ‰์…˜
  • set: ์ˆœ์„œ๊ฐ€ ์—†๊ณ , ๋ฉค๋ฒ„๊ฐ€ ์œ ์ผํ•œ ์ปฌ๋ ‰์…˜
//๋นˆ๋ฐฐ์—ด์˜ ์ƒ์„ฑ
var someInts = [Int]()
print("someInts is of type [Int] with \(someInts.count) items.")
// someInts is of type [Int] with 0 items.

//array๋Š” ํ‘œํ˜„๋ฐฉ๋ฒ•์ด ๋‹ค์–‘ํ•˜๋‹ค.
//์•„๋ž˜๊ฐ€ ๋‹ค ๊ฐ™์€ ํ‘œํ˜„์ด๋‹ค.
//var someInts: Array<Int> = Array<Int>()
// var someInts: Array<Int> = [Int]()
// var someInts: Array<Int> = []
// var someInts: [Int] = Array<Int>()
// var someInts: [Int] = [Int]()
// var someInts: [Int] = []
// var someInts = [Int]()
//array์˜ ํ™œ์šฉ
someInts.append(1)
someInts.append(100)

// Int ํƒ€์ž…์ด ์•„๋‹ˆ๋ฏ€๋กœ Array์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค
//someInts.append(101.1)

print(someInts)	// [1, 100]

// ๋ฉค๋ฒ„ ํฌํ•จ ์—ฌ๋ถ€ ํ™•์ธ
print(someInts.contains(100)) // true
print(someInts.contains(99)) // false

// ๋ฉค๋ฒ„ ๊ต์ฒด
someInts[0] = 99

// ๋ฉค๋ฒ„ ์‚ญ์ œ
someInts.remove(at: 0)
someInts.removeLast()
someInts.removeAll()

// ๋ฉค๋ฒ„ ์ˆ˜ ํ™•์ธ
print(someInts.count)

// ์ธ๋ฑ์Šค๋ฅผ ๋ฒ—์–ด๋‚˜ ์ ‘๊ทผํ•˜๋ ค๋ฉด ์ต์…‰์…˜ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜๋ฐœ์ƒ
//someInts[0]
  • let์„ ์‚ฌ์šฉํ•˜์—ฌ array๋ฅผ ์„ ์–ธํ•˜๋ฉด ๋ถˆ๋ณ€์ด ๋œ๋‹ค.
let immutableArray = [1, 2, 3]

// ์ˆ˜์ •์ด ๋ถˆ๊ฐ€๋Šฅํ•œ Array์ด๋ฏ€๋กœ ๋ฉค๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค
//immutableArray.append(4)
//immutableArray.removeAll()

3๏ธโƒฃ DataSource & Delegate

Table view์—์„œ ์ค‘์š”ํ•œ ํ”„๋กœํ† ์ฝœ์ด ๋˜๋Š” DataSource & Delegate

  1. Table view๋ž€?
    -> ๋‹จ์ผ ์—ด์˜ ํ–‰์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œ์‹œํ•˜๋Š” view
  • ํ•˜๋‚˜์˜ ์—ด์— ์ˆ˜์ง์œผ๋กœ ์Šคํฌ๋กค๋˜๋Š” ๋‚ด์šฉ์˜ ํ–‰์„ ํ‘œ์‹œํ•˜๋Š” view๋กœ ํ‘œ์˜ ๊ฐ ํ–‰์—๋Š” ์•ฑ ์ปจํ…์ธ ๊ฐ€ ํ•˜๋‚˜์”ฉ ํฌํ•จ. ์˜ˆ๋ฅผ ๋“ค์–ด ์—ฐ๋ฝ์ฒ˜ ์•ฑ์€ ๊ฐ ์—ฐ๋ฝ์ฒ˜์˜ ์ด๋ฆ„์„ ๋ณ„๋„์˜ ํ–‰์— ํ‘œ์‹œํ•˜๊ณ  ์„ค์ • ์•ฑ์˜ ๊ธฐ๋ณธ ํŽ˜์ด์ง€์—๋Š” ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์„ค์ • ๊ทธ๋ฃน์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ๊ธด ํ–‰ ๋ชฉ๋ก์„ ํ‘œ์‹œํ•˜๋„๋ก ํ…Œ์ด๋ธ”์„ ๊ตฌ์„ฑํ•˜๊ฑฐ๋‚˜ ๊ด€๋ จ ํ–‰์„ ์„น์…˜์œผ๋กœ ๊ทธ๋ฃนํ™”ํ•˜์—ฌ ๋‚ด์šฉ์„ ์‰ฝ๊ฒŒ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. devloper page

  1. Delegate
  • Delegate๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๊ฐ€ ๋ชจ๋“  ์ผ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ฒ˜๋ฆฌ ํ•ด์•ผ ํ•  ์ผ ์ค‘ ์ผ๋ถ€๋ฅผ ๋‹ค๋ฅธ ๊ฐ์ฒด์— ๋„˜๊ธฐ๋Š” ๊ฒƒ์„ ๋œป ํ•ฉ๋‹ˆ๋‹ค. ์‰ฝ๊ฒŒ ๋งํ•ด์„œ ์šฐ๋ฆฌ๊ฐ€ ํ•ด์•ผํ•  ์ผ์„ ๋Œ€์‹ ํ•ด์„œ ํ•ด์ฃผ๋Š” ๋Š๋‚Œ์ž…๋‹ˆ๋‹ค.

  • TableView์˜ ์‹œ๊ฐ์ ์ธ ๋ถ€๋ถ„ ์ˆ˜์ •, ํ–‰์˜ ์„ ํƒ ๊ด€๋ฆฌ, ์•ก์„ธ์„œ๋ฆฌ๋ทฐ ์ง€์› ๊ทธ๋ฆฌ๊ณ  ํ…Œ์ด๋ธ”๋ทฐ์˜ ๊ฐœ๋ณ„ ํ–‰ ํŽธ์ง‘์„ ๋„์™€์ค๋‹ˆ๋‹ค.

  • ์˜ˆ๋ฅผ๋“ค๋ฉด 1ํ–‰์— ๋†’์ด๋Š” ์–ผ๋งˆ์ธ์ง€, 3ํ–‰์„ ์„ ํƒํ•˜๋ฉด ๋ฌด์—‡์„ ํ•˜๋Š”์ง€, 3ํ–‰์€ ์–ผ๋งˆ๋‚˜ ๋“ค์—ฌ์“ฐ๋ฉด ๋˜๋Š”์ง€ ๊ฐ™์€ ๋ชจ์–‘๊ณผ ๋™์ž‘์„ ๊ด€๋ฆฌํ•œ๋‹ค.

  1. Datasource
  • Datasource๋Š” ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์˜ Delegate๋กœ, ํ…Œ์ด๋ธ”๋ทฐ์˜ ์‹œ๊ฐ์  ๋ชจ์–‘์— ๋Œ€ํ•œ ์ตœ์†Œํ•œ์˜ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Delegate์™€ ๋น„์Šทํ•˜๊ฒŒ ์ฒ˜๋ฆฌ ํ•ด์•ผ ํ•  ์ผ ์ค‘ ์ผ๋ถ€๋ฅผ ๋‹ค๋ฅธ ๊ฐ์ฒด์— ๋„˜๊ฒจ์„œ ์ž‘์—…์„ ๋Œ€์‹ ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

  • TableView ๊ฐ์ฒด์— ์„น์…˜์˜ ์ˆ˜์™€ ํ–‰์˜ ์ˆ˜๋ฅผ ์•Œ๋ ค์ฃผ๋ฉฐ, ํ–‰์˜ ์‚ฝ์ž…, ์‚ญ์ œ ๋ฐ ์žฌ์ •๋ ฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์„ ํƒ์ ์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์˜ˆ๋ฅผ๋“ค๋ฉด ์ด ์„น์…˜์ด ๋ช‡๊ฐœ์ธ์ง€, 4ํ–‰์— ์–ด๋–ค ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ  ์‹ถ์€์ง€, 1์„น์…˜ ํƒ€์ดํ‹€์€ ๋ฌด์—‡์ธ์ง€์™€ ๊ฐ™์€ ๊ฒƒ์€ ๊ด€๋ฆฌํ•œ๋‹ค.

์‹ค์Šต ์ฒดํฌ๋ฆฌ์ŠคํŠธโœ…

  • Protocol์— ๋Œ€ํ•œ ์‹ค์Šต์„ ์ง„ํ–‰ํ•˜๊ณ , ๊ฐœ๋…์— ๋Œ€ํ•ด ์ดํ•ดํ–ˆ๋‚˜์š”?
  • Delegate์— ๋Œ€ํ•œ ์‹ค์Šต์„ ์ง„ํ–‰ํ•˜๊ณ , ๊ฐœ๋…์— ๋Œ€ํ•ด ์ดํ•ดํ–ˆ๋‚˜์š”?
  • IBAction์„ ํ†ตํ•ด ๋ทฐ์— ์•ก์…˜์„ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

๐Ÿ’ญ์ƒ๊ฐํ•ด ๋ณผ๊นŒ์š”?๐Ÿ’ญ

โ” ๋‹ค์‹œ ํ•œ๋ฒˆ ๋ฌป๊ฒ ์Šต๋‹ˆ๋‹ค. ์นด์นด์˜คํ†ก์˜ ์นœ๊ตฌ ๋ทฐ๋Š” ์–ด๋–ค ๊ฒƒ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์„๊นŒ์š”? ๊ทธ ์ด์œ ๋Š”์š”?

๐Ÿ…ฐ๏ธ table view๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์„ ๊ฒƒ! ์ด์œ ๋Š” ํ…Œ์ด๋ธ”๋ทฐ์˜ ์„น์…˜๊ณผ ๋ฐ์ดํ„ฐ์˜ ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ.

โ” ์‹ค์Šต๊ณผ ๊ฐ™์ด A View์—์„œ B View์— ๊ด€์—ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ Protocol๋ฟ์ด ์•„๋‹™๋‹ˆ๋‹ค! โ€œNotificationโ€์ด๋ผ๋Š” ํ‚ค์›Œ๋“œ๋กœ ํ•œ๋ฒˆ ์ฐพ์•„๋ณด๊ณ  ๊ณต๋ถ€ํ•ด๋ณด์„ธ์š”!

๐Ÿ…ฐ๏ธ NotificationCenter๋ฅผ ํ†ตํ•ด ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์กฐ์ฒด๋‹ค. ์˜ต์ €๋ฒ„๋“ค์—๊ฒŒ ์ „๋‹ฌ๋˜๋Š” ๊ตฌ์กฐ์ฒด๋กœ ์ •๋ณด๊ฐ€ ๋‹ด๊ฒจ์žˆ๊ณ , ํ•ด๋‹น ์•Œ๋ฆผ์„ ๋“ฑ๋กํ•œ ์˜ต์ €๋ฒ„์—๊ฒŒ๋งŒ ์ „๋‹ฌ๋œ๋‹ค. ๊ตฌ์กฐ์ฒด๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.

var name: Notification.Name
var object: Any?
userInfo: [AnyHashable : Any]?
  • name
    ์ „๋‹ฌํ•˜๊ณ ์ž ํ•˜๋Š” notification์˜ ์ด๋ฆ„ (์ด๊ฑธ ํ†ตํ•ด ์•Œ๋ฆผ์„ ์‹๋ณ„ํ•œ๋‹ค)
  • object
    ๋ฐœ์†ก์ž๊ฐ€ ์˜ต์ €๋ฒ„์—๊ฒŒ ๋ณด๋‚ด๋ ค๊ณ  ํ•˜๋Š” ๊ฐ์ฒด. ์ฃผ๋กœ ๋ฐœ์†ก์ž ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐ ์“ฐ์ž„
  • userInfo
    notification๊ณผ ๊ด€๋ จ๋œ ๊ฐ’ ๋˜๋Š” ๊ฐ์ฒด์˜ ์ €์žฅ์†Œ. Extra data๋ฅผ ๋ณด๋‚ด๋Š”๋ฐ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

โ” ์—ฌ๋Ÿฌ๋ถ„๋“ค์ด ์ƒ๊ฐํ•˜์‹œ๊ธฐ์— Notification๊ณผ Protocol ์ค‘ ์–ด๋–ค ๊ฒƒ์ด ๋” ํšจ์œจ์ ์ธ ๊ฒƒ ๊ฐ™๋‚˜์š”? ๊ทธ ์ด์œ ๋Š”์š”?

๐Ÿ…ฐ๏ธ NotificationCenter๋Š” ์–ธ์ œ ์‚ฌ์šฉํ•ด์•ผํ• ๊นŒ?

  • ์•ฑ ๋‚ด์—์„œ ๊ณต์‹์ ์ธ ์—ฐ๊ฒฐ์ด ์—†๋Š” ๋‘ ๊ฐœ ์ด์ƒ์˜ ์ปดํฌ๋„ŒํŠธ๋“ค์ด ์ƒํ˜ธ์ž‘์šฉ์ด ํ•„์š”ํ•  ๋•Œ
  • ์ƒํ˜ธ์ž‘์šฉ์ด ๋ฐ˜๋ณต์ ์œผ๋กœ ๊ทธ๋ฆฌ๊ณ  ์ง€์†์ ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ์•ผ ํ•  ๋•Œ
  • ์ผ๋Œ€๋‹ค ๋˜๋Š” ๋‹ค๋Œ€๋‹ค ํ†ต์‹ ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ
profile
๊ฑด์ถ•ํ•™๋„์˜ PM ๋„์ „๊ธฐ

0๊ฐœ์˜ ๋Œ“๊ธ€