Potato
์•ˆ๋…•ํ•˜์„ธ์š”, ๊ฐ์žก๋‹ˆ๋‹ค?๐Ÿฅ” ^___^ ๐Ÿ˜บ github ๋ฐ”๋กœ๊ฐ€๊ธฐ ๐Ÿ‘‰๐Ÿป

potato's iOS Story/๊ฐœ๋ฐœํ•˜๋ฉด์„œ ๋งŒ๋‚œ ์นœ๊ตฌ๋“ค

[UIKit] @available ์–ด๋…ธํ…Œ์ด์…˜์— ๋Œ€ํ•ด์„œ, ๊ทธ๋ฆฌ๊ณ  ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ required init(coder: ) ๋Œ€์ฒ˜๋ฒ•(?)

๊ฐ์ž ๐Ÿฅ” 2022. 11. 1. 03:01
๋ฐ˜์‘ํ˜•

์˜ค๋Š˜์€ ์ฃผ๋ง์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋งŽ์€ ๋ทฐ๋ฅผ ๋งŒ๋“ค์ง€๋Š” ์•Š์•˜๊ณ  ์ฝ”๋“œ๋ฆฌ๋ทฐ๋ฅผ ํ•˜๊ณ , ๋ชฐ๋ž๋˜๊ฒƒ์„ ์•Œ์•„๊ฐ€๋Š”๋ฐ ์ง‘์ค‘ํ–ˆ๋‹ค. 
๊ทธ์ค‘ ์˜ค๋Š˜ ์ธ์ƒ๊นŠ์—ˆ๋˜ ๋‚ด์šฉ์„ ์ ์–ด๋ดค๋‹ค.

 

๐Ÿค” @available?? ์ž์ฃผ๋ณด๊ธดํ–ˆ๋Š”๋ฐ, ์ด๊ฒŒ ๋ญ์ง€?

์ฝ”๋“œ๋ฅผ๋ณด๋ฉด, @๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฌด์–ธ๊ฐ€๋ฅผ ์ž์ฃผ ๋ณด๊ณคํ•œ๋‹ค. @main ๋„ ์žˆ๊ณ , @available๋„ ์žˆ๊ณ ,, #available๋„ ์žˆ๊ณ !

 

1๏ธโƒฃ @available์„ ์–ด๋””์„œ ๋ดค์–ด?

๋Œ€์ถฉ ์•Œ๊ธฐ๋กœ๋Š” @available์€ ios ๋ฒ„์ ผ์— ๋‹ค๋ฅธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ• ๋•Œ ๋งŽ์ด ์ผ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

@available(iOS 12, *)
func solution() { }

@available ๋Š” ํด๋ž˜์Šค ๋˜๋Š” ํ”„๋กœํ† ์ฝœ ์•ž์— ๋†“์ธ๋‹ค๊ณ  ํ•œ๋‹ค. ํƒ€์ž… ๋˜๋Š” ํ”„๋กœํ† ์ฝœ์ด ์ ์šฉ๋˜๋Š” ํ”Œ๋žซํผ ๋ฐ OS๋ฅผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค. #available๊ณผ ๋‹ค๋ฅด๊ฒŒ, ์ปดํŒŒ์ผํƒ€์ž„์— ๊ฒฝ๊ณ  ๋˜๋Š” ์˜ค๋ฅ˜๋ฅผ ์ƒ์„ฑํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

 

2๏ธโƒฃ ๊ทธ๋Ÿผ #available์€ ๋ญ”๋ฐ?

#available์€ ์ปดํŒŒ์ผ ์—๋Ÿฌ๋Š” ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๊ณ , ์•„๋ž˜์ฒ˜๋Ÿผ ๋ถ„๊ธฐ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‚ด๊ฐ€ deploy target์ด 10์ด๋ผ๋ฉด, ์•„๋ž˜์ฒ˜๋Ÿผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค.

if #available(iOS 12, *) {
     self.solution()
} else {
     // Fallback on earlier versions
}

 

3๏ธโƒฃ ๊ทธ๋Ÿผ ์—ฌ๊ธฐ์„œ * ์€ ๋ญ˜๊นŒ?

‘๋ชจ๋‘’๋ฅผ ๋œปํ•œ๋‹ค.

@available(*, unavailable)

์ด๋ ‡๊ฒŒ ํ–ˆ์„ ๊ฒฝ์šฐ๋Š”, ๋ชจ๋“  iOS ํ”Œ๋žซํผ์— ๋Œ€ํ•ด์„œ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์œ„ ์ฝ”๋“œ๋Š” ๊ทธ๋Ÿผ ๋ชจ—๋“  ํ”Œ๋žซํผ์—์„œ unavailable ํ•˜๋‹ค๋Š”๋œป์ด๋‹ค.

 

์ž ๊ทธ๋Ÿผ ์šฐ๋ฆฌ ํŒ€์›์ด ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ๋ณด์ž.

override init(frame: CGRect) {
    super .init(frame: frame)
    self.setupLayout()
}

@available(*, unavailable)
required init?(coder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ, ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์ง„์ž…ํ•˜์ง€ ์•Š๊ฒ ๋‹ค!๊ณ  ์„ ์–ธํ•ด์ฃผ์—ˆ๋‹ค.

 

์™œ????? required init(coder: ) ์ €๊ฑฐ ํ•„์ˆ˜ ์•„๋‹˜??

์ง€๋‚œ๋ฒˆ ๋‚ด ๋ธ”๋กœ๊ทธ์—์„œ ํ•œ๋ฒˆ ์–ธ๊ธ‰ํ•œ์ ์ด ์žˆ๋‹ค.

https://didu-story.tistory.com/288

 

[UIKit] init(frame: ), init(coder: ) ์ด๋‹ˆ์…œ๋ผ์ด์ €

UIKit์„ ์‚ฌ์šฉํ•ด์„œ ์•ฑ์„ ๋งŒ๋“ค ๋•Œ ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ํ•„์ˆ˜์ ์œผ๋กœ ์ ์–ด์•ผ๋งŒ ํ•œ๋‹ค. ๊ณผ์—ฐ ์ด ์ฝ”๋“œ๊ฐ€ ์˜๋ฏธํ•˜๋Š”๊ฒŒ ๋ญ๊ณ  ์™œ ์ ์–ด์•ผํ• ๊นŒ? ๐ŸŸฃ ์˜ˆ์‹œ์ฝ”๋“œ init(frame: CGRect, data: Data) { self.data = data super.init(frame: f..

didu-story.tistory.com

 

ํ•ด๋‹น ๋งˆ์ง€๋ง‰๊ธ€์„ ๋ณด๋ฉด, ๊ทธ๋ƒฅ ํ•„์ˆ˜์‚ฌํ•ญ์ด๊ธฐ๋–„๋ฌธ์— required๋ผ๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค๊ณ ๋งŒ ์ ํ˜€์žˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๊ฐ€์žฅ ๊ถ๊ธˆํ–ˆ๋˜๊ฒŒ, ์Šคํ† ๋ฆฌ๋ณด๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ ์ฝ”๋“œ ๋ฒ ์ด์Šค๋กœ ์ž‘์„ฑํ–ˆ์„๋•Œ, ์ด์ฝ”๋“œ๋Š” ๊ผญ ํ•„์š”ํ•œ๊ฐ€? ์— ๋Œ€ํ•œ ์˜๋ฌธ์ด์—ˆ๋‹ค.

๊ทผ๋ฐ ํŒ€์› ์ฝ”๋“œ์— ์œ„์ฒ˜๋Ÿผ ์ž‘์„ฑ๋˜์–ด์žˆ์—ˆ๊ณ ,,, ์ด๋ฅผ ์ฝ”๋“œ๋ฆฌ๋ทฐ๋ฅผ ํ†ตํ•ด์„œ ์™œ ์ด๋ ‡๊ฒŒ ์ž‘์„ฑ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

์œผ์•… ๋„ˆ๋ฌด ๊ธธ๋‹ค! ์–ด์จŒ๋“ , ์„œ๋ก  ๋‹ค ๋’ค๋กœํ•˜๊ณ  ๋‚ด๊ฐ€ ์ด๋ฒˆ์„ ํ†ตํ•ด ์•Œ๊ฒŒ๋œ ๊ฒƒ์„ ์ ์–ด๋ณด์ž๋ฉด,

  1. storyboard / xib ํŒŒ์ผ์ด ์žˆ๋Š๋ƒ์— ๋”ฐ๋ผ์„œ init์œผ๋กœ ๋“ค์–ด๊ฐˆ์ง€ init(coder: )๋กœ ๋“ค์–ด๊ฐˆ์ง€ ๊ฒฐ์ •๋œ๋‹ค.
  2. storyboard / xib๊ฐ€ ์—†๋‹ค๋ฉด init()์œผ๋กœ ์ง„์ž…ํ•œ๋‹ค.

 

๐Ÿค” ๊ทผ๋ฐ ?? ์ฝ”๋“œ๋ฒ ์ด์Šค๋ผ๋ฉด??? ๊ตณ์ด init(coder: )๋กœ ์ง„์ž…ํ•˜์ง€ ์•Š์•„๋„ ๋˜๊ธฐ ๋–„๋ฌธ์— @available(*, unavailable) ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค˜์„œ ์•„๋ฌด๊ฒƒ๋„ ๋“ค์–ด๊ฐ€์ง€ ์•Š๋„๋ก ์ฒ˜๋ฆฌํ•ด์ฃผ์ž!!!

๊ทธ๋ž˜๋„ ๊ฒฐ๊ตญ ์จ์ค˜์•ผํ•˜๋Š”๊ฑด ๋งˆ์ฐฌ๊ฐ€์ง€๊ตฐ? ํ ๋ƒ๋ง ์•Œ์•„์„œ ๋˜‘๋˜‘ํ•˜๊ฒŒ ์•ˆ์จ๋„ ๋œ๋‹ค๋Š” ๋ฌด์Šจ ํ•ด๊ฒฐ์ฑ…์ด ์žˆ์„์ค„์•Œ์•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ๋ผ๋„ ์•Œ์•„๊ฐ€์„œ ๋„˜ ๋ฟŒ๋“ฏํ•˜๋‹ค.

 

๋ฐ˜์‘ํ˜•