iOS & Swift - The Complete iOS App Development Bootcamp ์ ๋ํ TIL ์ ๋๋ค.
ํ์ต ์ฃผ์
@IBOutlet, @IBAction์ ์ฌ์ฉํ์ฌ ์ธํฐํ์ด์ค ๋น๋์ ์ฝ๋๋ฅผ ์ฐ๊ฒฐํ๋ ๋ฒ์ ๋ฐฐ์ด๋ค.
@IBOutlet
@IBOutlet์ ์ธํฐํ์ด์ค ๋น๋์ UI ์์๋ฅผ Xcode์ ์ฝ๋์ ์ฐ๊ฒฐํ๋ ๋ฐ์ ์ฌ์ฉ๋๋ ํค์๋์ด๋ค. ์ด๋ฅผ ํตํด UI ์์์ ๋ํ ์ฐธ์กฐ๋ฅผ ์์ฑํ๊ณ ์ฝ๋์์ ์ก์ธ์ค ํ ์ ์์ผ๋ฏ๋ก ์์์ ์์ฑ์ ์ธ์คํํฐ๊ฐ ์๋ ์ฝ๋๋ก ์ง์ ํ ์ ์๋ค. ์ฐธ๊ณ ๋ก ๋ฏธ๊ตญ์์๋ ์ฝ์ผํธ๋ฅผ ์ฝ์ผํธ๋ผ ํ์ง ์๊ณ Outlet์ด๋ผ๊ณ ํ๋ค. ๋ฐ๋ผ์, IBOutlet์ ์ด๋ฆ ๊ทธ๋๋ก ์ธํฐํ์ด์ค ๋น๋์ ์ฐ๊ฒฐํ๋ ์ฝ์ผํธ ์ญํ ์ ํ๋ ๊ฒ์ด๋ค.
์ฝ๋์ ์ฐ๊ฒฐ์ํฌ UI ์์๋ฅผ control ๋ฒํผ์ ๋๋ฅธ ์ํ๋ก Assistant ์์ญ์ผ๋ก ๋๋๊ทธํ๋ฉด ์ ํ๋ฉด๊ณผ ๊ฐ์ ์ฐฝ์ด ๋จ๋๋ฐ Name ๋ถ๋ถ์ ํด๋น UI ์์์ ์ฝ๋ ๋ณ์๋ช ์ ์ ์ด์ฃผ๋ฉด ๋๋ค.
@IBOutlet
@๋ Swift์์ ํน์ฑ(Attribute, ์์ฑ์ผ๋ก๋ ๋ฒ์ญ์ด ๋๋๋ฐ Property์ ๊ฒน์น๋ฏ๋ก ํน์ฑ์ด๋ผ๊ณ ํ๊ฒ ์)๋ผ๊ณ ํ๋ ๊ฒ์ผ๋ก ์ปดํ์ผ๋ฌ์๊ฒ ์ด๋ค ํน์ฑ์ ๊ฐ์ง๊ณ ์๋ค๊ณ ์ ํ๋ ์ญํ ์ ํ๋ ํค์๋์ด๋ค. Swift์ ์์ฑ์๋ ์ ์ธ ํน์ฑ๊ณผ ํ์ ํน์ฑ์ด ์๋ค. ๋ ํน์ฑ ๋ชจ๋ ์ ์ธ์ ํ ๋ ํน์ ํ์ ์ ์ง์ ํ ๋ ์ปดํ์ผ๋ฌ์๊ฒ ํน์ฑ์ ๋ํ ์ ๋ณด๋ฅผ ์ ๋ฌํ๋ ์ผ์ข ์ ๋ฉํ ๋ฐ์ดํฐ ์ญํ ์ ํ๋ค.
@IBOutlet ๊ฐ์ ๊ฒฝ์ฐ์๋ diceImageViewOne ํ๋กํผํฐ๋ฅผ ์ ์ธํ ๋ ์ธํฐํ์ด์ค ๋น๋์ ์ฐ๊ฒฐ๋ ํ๋กํผํฐ๋ผ๋ ํน์ฑ์ ์ปดํ์ผ๋ฌ์๊ฒ ์๋ ค์ฃผ๋ ์ญํ ์ ํ๋ ๊ฒ์์ผ๋ก ์ ์ธ ํน์ฑ์ด๋ผ๊ณ ํ ์ ์๋ค.
weak
Swift์์ weak๊ณผ strong์ Class์ ๊ฐ์ ์ฐธ์กฐ ํ์ ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ธฐ๋ฒ์ธ ARC(Automatic Reference Count)์ ๊ด๋ จ์ด ์๋ค. ์๋ ์ฝ๋๋ strong ์ฐธ์กฐ์ ๋ํ ์์์ด๋ค. ์ฐธ๊ณ ๋ก Swift์์๋ ๊ธฐ๋ณธ์ด ๊ฐํ ์ฐธ์กฐ์ด๋ฏ๋ก ์๋ฌด๋ฐ ํค์๋๋ฅผ ์ฌ์ฉํ์ง ์์๋ ๊ฐํ ์ฐธ์กฐ๊ฐ ๋๋ค.
class Person {
let name: String
init(name: String) {
self.name = name
print("\(name) is being initialized")
}
deinit {
print("\(name) is being deinitialized")
}
}
var person1: Person?
var person2: Person?
var person3: Person?
person1 = Person(name: "Alice") // ๊ฐํ ์ฐธ์กฐ -> RC: 1
person2 = person1 // ๊ฐํ ์ฐธ์กฐ -> RC: 2
person3 = person1 // ๊ฐํ ์ฐธ์กฐ -> RC: 3
person1 = nil // RC: 2
person2 = nil // RC: 1
person3 = nil // RC: 0 -> ๋ฉ๋ชจ๋ฆฌ์์ ํ ๋น ํด์
๊ฐํ ์ฐธ์กฐ๋ฅผ ํ๋ค๋ ๊ฒ์ RC(Referece Count)๊ฐ 1 ์ฆ๊ฐํ๋ค๋ ์๋ฏธ์ด๋ค. RC๊ฐ 0์ด ๋๋ฉด ๋ฉ๋ชจ๋ฆฌ์ ํ ์์ญ์์ ํ ๋น ํด์ ๊ฐ ๋๋ค. ์ฐธ๊ณ ๋ก, ์ผ๋ฐ์ ์ผ๋ก ์ฐธ์กฐ ํ์ ์ ํ ์์ญ, ๊ฐ ํ์ ์ ์คํ ์์ญ์ ์ ์ฅ๋๋ค.
๊ฐํ ์ฐธ์กฐ๋ฅผ ํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋์์ ์ํ์ฑ์ด ์กด์ฌํ๋ค. ์ด ๋ถ๋ถ๊น์ง ์ค๋ช ํ๋ฉด ๊ธ์ด ๋๋ฌด ๊ธธ์ด์ง๋ ์ฐธ๊ณ ๋งํฌ๋ก ๋์ฒดํ๊ฒ ๋ค.
๋ค์์ weak ์ฐธ์กฐ์ ๋ํ ์์์ด๋ค. ์ฝํ ์ฐธ์กฐ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด weak ํค์๋๋ฅผ ๋ถ์ฌ์ค์ผ ํ๋ค. weak ์ฐธ์กฐ๋ RC ๊ฐ์ ์ฌ๋ฆฌ์ง ์๋ ์ฐธ์กฐ ๋ฐฉ์์ด๋ค.
class Person {
let name: String
init(name: String) {
self.name = name
print("\(name) is being initialized")
}
deinit {
print("\(name) is being deinitialized")
}
}
var person1: Person?
weak var person2: Person?
weak var person3: Person?
person1 = Person(name: "Alice") // ๊ฐํ ์ฐธ์กฐ -> RC: 1
person2 = person1 // ์ฝํ ์ฐธ์กฐ -> RC: 1
person3 = person1 // ์ฝํ ์ฐธ์กฐ -> RC: 1
person1 = nil // RC: 0 -> ๋ฉ๋ชจ๋ฆฌ์์ ํ ๋น ํด์
print(person2) // nil
print(person3) // nil
์ด๋ ๊ฒ weak๊ณผ strong ์ฐธ์กฐ์ ๋ํด์ ์์๋ดค๋๋ฐ ๊ณผ์ฐ IBOutlet๊ณผ ๋ฌด์จ ๊ด๋ จ์ด ์์๊น? ์ด ๋ถ๋ถ์ ๋ํด์ ๊ถ๊ธ์ฆ์ด ์๊ฒจ ๋ฐ๋ก ๊ณต๋ถํด ๋ดค๋ค.
๋ค์์ ๋ทฐ ์ปจํธ๋กค๋ฌ, ๋ทฐ(UIView) ๊ทธ๋ฆฌ๊ณ ๋ทฐ ์์ ์ฌ๋ผ์ค๋ UI ์์๋ค(๋ทฐ ๊ฐ์ฒด) ๊ฐ์ ์ฐธ์กฐ ๊ตฌ์กฐ์ด๋ค.
์ฐ์ , ๋ทฐ ์์ UI ์์๋ค์ด ์ฌ๋ผ์์ ํ๋ฉด์ ๊ตฌ์ฑํ๊ธฐ ๋๋ฌธ์ ๋ทฐ ์ปจํธ๋กค๋ฌ๊ฐ ์ด์์๋ ํ ๋ทฐ๋ ์์ด์ง๋ฉด(RC ๊ฐ์ด 0) ์๋๋ฏ๋ก ๋ชจ๋ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ ์์ ์ด ๊ด๋ฆฌํ๋ ๋ทฐ์ ๋ํด ๊ฐํ ์ฐธ์กฐ๋ฅผ ์ ์งํ๊ณ ๋ทฐ๋ ์์ ์ ํ์ UI ์์๋ค์ ๋ํด ๊ฐํ ์ฐธ์กฐ๋ฅผ ์ ์งํ๋ค.
์ด๋, IBOutlet์ผ๋ก UI ์์๋ฅผ ์ฐ๊ฒฐํ ๋ strong ์ฐธ์กฐ์ด๋ weak ์ฐธ์กฐ์ด๋์ ๋ฐ๋ผ์ ๋ค์๊ณผ ๊ฐ์ RC ๊ฐ์ด ํ์ฑ๋๋ค.
- ๋ทฐ ์ปจํธ๋กค๋ฌ๋ ๋ทฐ๋ฅผ ๊ฐํ๊ฒ ์ฐธ์กฐํ๋ค -> ๋ทฐ์ RC: 1
- ๋ทฐ๋ UI ์์๋ฅผ ๊ฐํ๊ฒ ์ฐธ์กฐํ๋ค -> UI ์์์ RC: 1
- ๋ทฐ ์ปจํธ๋กค๋ฌ๊ฐ UI ์์๋ฅผ ๊ฐํ๊ฒ ์ฐธ์กฐํ๋ค -> UI ์์์ RC: 2
- ๋ทฐ ์ปจํธ๋กค๋ฌ๋ ๋ทฐ๋ฅผ ๊ฐํ๊ฒ ์ฐธ์กฐํ๋ค -> ๋ทฐ์ RC: 1
- ๋ทฐ๋ UI ์์๋ฅผ ๊ฐํ๊ฒ ์ฐธ์กฐํ๋ค -> UI ์์์ RC: 1
- ๋ทฐ ์ปจํธ๋กค๋ฌ๊ฐ UI ์์๋ฅผ ์ฝํ๊ฒ ์ฐธ์กฐํ๋ค -> UI ์์์ RC: 1(๋ณ๋ ์์)
์๊น ์์์ ๋งํ๋ฏ ๊ฐํ ์ฐธ์กฐ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋์์ ๊ฐ๋ฅ์ฑ์ด ์กด์ฌํ๋ค. ํ์ง๋ง, ์ ์์ ์ธ ๊ฒฝ์ฐ์๋ ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ์ผ์ด๋์ง ์๋๋ค.
๋ค์์ ๋ทฐ ์ปจํธ๋กค๋ฌ๊ฐ ์ ์์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ํด์ ๊ฐ ๋์์ ๋์ RC ๊ฐ์ด๋ค.
- ๋ทฐ ์ปจํธ๋กค๋ฌ๊ฐ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ๋๋ฉด์ ๋ทฐ์ UI ์์์ ๋ํ ์ฐธ์กฐ๋ฅผ ์๋๋ค -> ๋ทฐ์ RC: 0, UI ์์์ RC: 1(1 ๊ฐ์)
- ๋ทฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ๋๋ฉด์ UI ์์์ ๋ํ ์ฐธ์กฐ๋ฅผ ์๋๋ค -> UI ์์์ RC: 0 (๋ฉ๋ชจ๋ฆฌ ํด์ )
๊ทธ๋ฌ๋ฉด ์ด๋ค ๊ฒฝ์ฐ์ ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ์ผ์ด๋ ๊น? ๊ทธ๋ฆฌ๊ณ strong ์ฐธ์กฐ์ weak ์ฐธ์กฐ์ ๋ํ ์ฌ์ฉ ํ๋จ ๊ธฐ์ค์ด ๋ฌด์์ผ๊น? ํด๋น ๋ด์ฉ๋ ์ผ์ผ์ด ๋ค ์ค๋ช ํ๋ฉด ๊ธ์ด ๊ธธ์ด์ง ๊ฒ ๊ฐ์ ์ฐธ๊ณ ๋งํฌ๋ก ๋์ฒดํ๊ฒ ๋ค.
์ด ๋ชจ๋ ๋ด์ฉ์ ์ข ํฉํด ๋ณด์์ ๋, ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ง์์ผ๋ก์จ ์ฑ๋ฅ์ ๋์ด๊ณ ์ถ๋ค๋ฉด weak ์ฐธ์กฐ๋ฅผ, ๋ทฐ ์ปจํธ๋กค๋ฌ๊ฐ ์ด์์๋ ํ UI ์์๋ค์ด ๊ฐ์ ๊ฐ๊ณ ์๋๋ก ๋ณด์ฅํจ์ผ๋ก์จ ์๋์น ์์ ๋ฐํ์ ์๋ฌ๋ฅผ ํผํ๊ณ ์ถ๋ค๋ฉด strong ์ฐธ์กฐ๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ ๊ฒ ๊ฐ๋ค.
UIImageView!
@IBOutlet ํ๋กํผํฐ์ ํ์ ์ ์ง์ ํด ์ฃผ๋ ๋ถ๋ถ์ธ๋ฐ ์ด๋ค UI ์์์ ์ฐ๊ฒฐ๋์๋์ ๋ฐ๋ผ ํ์ ์ด ๋ณ๊ฒฝ๋๋ค. ์ ์ฝ๋์์ ์ฐ๊ฒฐ๋ UI ์์๋ UIImageView์ด๋ฏ๋ก ํ์ ์ด UIImageView๋ก ์ค์ ๋์๋๋ฐ ์ด๋, ์์์ ์ธ๋ํ ์ต์ ๋(IUO: Implicitly Unwrapped Optional)์ด ์๋์ผ๋ก ๋ถ๋๋ค. ์ด ๋ถ๋ถ์ ๋ํด์ ๊ถ๊ธ์ฆ์ด ์๊ฒจ ๋ฐ๋ก ๊ณต๋ถํด ๋ดค๋ค.
์ ํํ ์ต์ ๋ ํ์ ?
Swift์์ ํด๋์ค์ ๊ตฌ์กฐ์ฒด๊ฐ ์ด๊ธฐํ๋์ด ๊ฐ๊ฐ์ ์ธ์คํด์ค๊ฐ ์์ฑ๋ ๋๊น์ง ๋ชจ๋ ์ ์ฅ ํ๋กํผํฐ๋ฅผ ์ ์ ํ ์ด๊ธฐ๊ฐ์ผ๋ก ์ค์ ํด์ผ ํ๋ค. ์ด๋, ์ด๊ธฐํ ์ค์ ์ ์ฅ ํ๋กํผํฐ๊ฐ ์ด๋ค ๊ฐ์ ๊ฐ์ ธ์ผ ํ๋์ง ๋ชจ๋ฅด๋ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ์ ํ ๋นํ๊ฑฐ๋ ์ ์ฅ ํ๋กํผํฐ๋ฅผ ์ต์ ๋ ํ์ ์ผ๋ก ์ ์ธํ ์ ์๋ค. IBOutlet ์ ์ฅ ํ๋กํผํฐ์ ์ฐ๊ฒฐ๋ UI ์์ ๊ฐ์ ๋๊ฒจ์ฃผ๋ ์์ ์ ๋ทฐ ์ปจํธ๋กค๋ฌ๊ฐ ์ด๊ธฐํ๋๊ณ ๋์ viewDidLoad() ๋ฉ์๋์์ ์ด๋ฃจ์ด์ง๋ค๊ณ ํ๋ค. ์ฆ, ๋ทฐ ์ปจํธ๋กค๋ฌ ํด๋์ค๊ฐ ์ด๊ธฐํ๋๋ ์์ ์ IBOutlet ์ ์ฅ ํ๋กํผํฐ์ ์ด๋ค ๊ฐ์ด ๋ค์ด์ฌ์ง ๊ฒฐ์ ์ด ์๋ ์ํ์ด๋ฏ๋ก ์ด๋ฅผ ์ํด ์ต์ ๋ ํ์ ์ผ๋ก ์ ์ธํ๋ค๊ณ ํ๋ค.
์ ํํ IUO๋ก ์๋ ์ ์ธ?
์ด ๋ถ๋ถ์ ์ต์ ๋๊ณผ IUO์ ์ฌ์ฉ ํ๋จ ๊ธฐ์ค์ ๋ํ ๊ฒ๊ณผ ์ฐ๊ด์ด ์๋ค. ์ธ์ ์ต์ ๋์ ์ฌ์ฉํ๊ณ , ์ธ์ IUO์ ์ฌ์ฉํ ๊น? ๋ณดํต Swift ๋ฌธ๋ฒ์ ๋ฐฐ์ธ ๋ IUO๋ ์ํํ๋ ๋๋๋ก์ด๋ฉด ์์ ์ฑ์ด ๋์ ์ต์ ๋์ ์ฌ์ฉํ๋ผ๊ณ ๋ง์ด ๋ค์์ ๊ฒ์ด๋ค. ๊ทธ๋ผ์๋ IUO ํ์ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ๋ช ํ์ฑ(Clarity)๊ณผ ํธ์์ฑ(Convenience) ๋๋ฌธ์ด๋ค. IUO ํ์ ์ผ๋ก ์ ์ธ๋ ๋ณ์๋ ์ต์ ๋ ๋ฐ์ธ๋ฉ์ด๋ ์ต์ ๋ ํจํด ๊ฐ์ด ์ง์ ๋ถํ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ ๊ฐ์ ๋ฐ๋ก ์ ๊ทผํ ์ ์์ด ์ฝ๋๊ฐ ๋ช ํํด์ง๊ณ ํธ๋ฆฌํ๋ค.
์๋ ์์๋ ๊ฐ๋จํ IUO์ ํน์ง์ ๋ณผ ์ ์๋ ์ฝ๋์ด๋ค.
let a: Int!
print(a) // ๋ฐ๋ก ์ด๊ธฐํ ํ์ง ์์ผ๋ฉด nil
let b: Int! = 1
let c: Int = b // Optional๋ก ์ฌ์ฉ๋์ง ์์ผ๋ฉด ์๋์ผ๋ก ์ธ๋ํ๋๋ค.
let d: Int = b! // ์ ๊ฒฐ๊ณผ์ ๊ฐ๋ค.
let e = b // ํ์
์ ๋ฐ๋ก ์ง์ ํด์ฃผ์ง ์์ผ๋ฉด Optional ํ์
์ด๋ค.
let f = b + 1 // ์๋์ผ๋ก ์ธ๋ํ๋์ด์ ์ฐ์ฐ์ ์ํํ๋ค.
print(f) // 2
let g: Int? = nil
print(a!) // nil ๊ฐ์ ๋ํ ๊ฐ์ ์ธ๋ํ์ ์ปดํ์ผ ํ์์ด ์๋๋ผ ๋ฐํ์์ ์ค๋ฅ๊ฐ ๋๋ฏ๋ก ์ฃผ์!!!!!!
์ ์ฝ๋์์ ๋ณ์ c์ f๋ฅผ ์ฃผ๋ชฉํด์ ๋ณด์. ์ต์ ๋ ํ์ ๋ณ์์๋ ๋ค๋ฅด๊ฒ IUO ํ์ ๋ณ์๋ ์๋์ผ๋ก ๊ฐ์ ์ธ๋ํ๋์ด ์์ ํ์ ๋ณ์์ฒ๋ผ ํ๋ํ ์ ์์ผ๋ฏ๋ก ํธ๋ฆฌํ๋ค.
์ด๋ฒ์ ๋ณ์ a์ g์ ์ฃผ๋ชฉํด ๋ณด์. ๋จผ์ , ๋ณ์ a์์ ๋ณด๋ฏ IUO ํ์ ์ ๋ณ์๋ฅผ ์ด๊ธฐํํ์ง ์์ผ๋ฉด nil ๊ฐ์ ๊ฐ๋๋ค. ๊ทธ๋ค์, ๋ณ์ g์์ ๋ณด๋ฏ nil ๊ฐ์ ๊ฐ์ ์ธ๋ํํ๋ฉด ์ปดํ์ผ ํ์์ด ์๋๋ผ ๋ฐํ์์ ์ค๋ฅ๊ฐ ๋๋ค. ์ด ๋ ๊ฐ์ง ํน์ง์ ๊ธฐ์ตํ๊ณ ์๋ ๊ธ์ ์ฝ์ด๋ณด์.
์ด๋ ๊ฒ ํธ๋ฆฌํ IUO ํ์ ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋ํ ๊ฐ์ฅ ํฐ ์ํ์ ๋ค์๊ณผ ๊ฐ๋ค.
class Person {
var age: Int!
}
let p: Person = Person()
print(p.age + 1)
์ ์ฝ๋๋ฅผ ๊ฐ๋จํ๊ฒ ์ค๋ช ํ๋ฉด ์์ง IUO ํ์ ์ ํ๋กํผํฐ๊ฐ ์ด๊ธฐํ๋์ง ์์ ์ํ์์ ์์ ํ์ ํ๋กํผํฐ์ฒ๋ผ ํ๋ํ๊ฒ ํ๋ค. ๋ณ์ a, g์์์ ํน์ง์ ๊ธฐ์ตํ ์ฌ๋์ด๋ผ๋ฉด ๋ถ๋ช ์ด ์ฝ๋์ ๊ฒฐ๊ณผ๋ฅผ ์ ์ ์์ ๊ฒ์ด๋ค.
๋ทฐ ์ปจํธ๋กค๋ฌ ํด๋์ค์ IBOutlet ํ๋กํผํฐ๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์์ง ๋ทฐ ์ปจํธ๋กค๋ฌ์ viewDidLoad() ๋ฉ์๋๊ฐ ๋ถ๋ฆฌ์ง ์๋ ์์ ์์ IBOutlet ํ๋กํผํฐ์ ์ ๊ทผํ๋ ์ํฉ์ด ๋ฐ์ํ๋ฉด ๋ฐํ์ ์๋ฌ๊ฐ ๋ ๊ฒ์ด๋ค. ์ปดํ์ผ ์๋ฌ๋ ๊ฐ๋ฐ ๋จ๊ณ์์ ๊ณ ์น๋ฉด ๋์ง๋ง ๋ฐํ์ ์๋ฌ๋ ์ค์ ์๋น์ค ์ค์ ์๋ฌ๊ฐ ๋๋ฏ๋ก ๊ต์ฅํ ์น๋ช ์ ์ผ ์ ์๊ธฐ ๋๋ฌธ์ ์ฃผ์ํด์ผ ํ๋ค.
๋ฐ๋ผ์, IUO ํ์ ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํ ๋์๋ ์ด ์ ์ ํญ์ ์๊ฐํ๋ฉด์ ๊ทธ์ ๋ํ ๋์ ๋ฐฉ์์ด ํ์ํ๋ค.
์ฒซ ๋ฒ์งธ ๋ฐฉ์์ ๋จ์ํ๊ฒ IUO ํ์ ์ ์ฌ์ฉํ์ง ์๊ณ ์ต์ ๋ ํ์ ์ ์ฌ์ฉํด์ ์ ์ธํ๋ ๊ฒ์ด๋ค. ์ต์ ๋ ๋ฐ์ธ๋ฉ์ด๋ ์ต์ ๋ ํจํด ๋ฑ์ ์ฌ์ฉํด์ ๋ช ํ์ฑ๊ณผ ํธ๋ฆฌ์ฑ์ ๋ฒ๋ฆฌ๊ณ ์์ ์ฑ์ ํํ๋ ์ฝ๋๋ฅผ ์ง๋ฉด ๋๋ค.
๋ ๋ฒ์งธ ๋ฐฉ์์ ์ต์ ๋ ์ฒด์ด๋์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
diceImageViewOne?.image๋ diceImageViewOne์ ๊ฐ์ด nil์ด ์๋ ๋ image ํ๋กํผํฐ์ ์ ๊ทผํ๋ผ๋ ์๋ฏธ์ด๋ค. ์ต์ ๋ ์ฒด์ด๋์ ์ฌ์ฉํด์ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ์ป์ง ๋ชปํ ์๋ ์์ง๋ง, ์ ์ด๋ ๋ฐํ์ ์๋ฌ๊ฐ ๋์ง๋ ์๋๋ค.
'iOS > UIKit' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[UIKit] I Am Rich ์ฑ ๋ง๋ค๊ธฐ (0) | 2023.05.09 |
---|
๋๊ธ