iOS ์คํฐ๋๋ฅผ ์งํํ๋ ค๊ณ ํ๋๋ฐ, ํ๋ก์ ํธ ๋ฒ๋ ค๋์ ๊ฒ๋ ๋ง๋งํ๊ณ ๋ฌธ๋ฒ ๊ฐ์ด๋๋ ๋ช ๋ฒ ์ฝ์์ง๋ง ์๋ฒฝํ๊ฒ ์๋ ๊ฒ์ ์๋๋ผ๋ ์๊ฐ์ด ๋ค์ด์ ๋ฌธ๋ฒ ์คํฐ๋๋ฅผ ์งํํ๊ธฐ๋ก ํ๋ค.
๋ณ์ ์ ์ธ, ๋ฐ๋ณต๋ฌธ, ํจ์ ๋ฑ์ ๋ฐํํ์ง ์๊ณ ๊ฐ์ ์ฝ๊ธฐ๋ก ํ๋ค.
let, var - ๋ณ๊ฒฝ๋์ง ์๋ ๊ฐ์๋ let ์ ์ฌ์ฉํ์.
let title: String = "ํ์
๋ช
์."
// let typeSafety: Int = "์ด๊ฑด ๋ถ๊ฐ๋ฅํ๋ค"
let content =
"""
์๋์ผ๋ก ํ์
์ ์ ์ถํ๊ธฐ ๋๋ฌธ์
ํน์ํ ์ํฉ์ด ์๋๋ฉด
์ธ ํ์ ์๋ค.
"""
let naming๐: String = "์ซ์๋ก ์์ํ๋ ์ด๋ฆ๋ง ์๋๋ฉด ๊ฑฐ์ ๋๋ถ๋ถ ๊ฐ๋ฅ"
print(naming๐, seperator : , terminator: " ")
/* python
print(naming, sep=",", end=" ") ์ ๊ฐ์. */
print("A"); print("B")
ํน๋ณํ ์ผ์ด์ค๊ฐ ์๋๋ผ๋ฉด ์ ์๋ Int (ํ๋ซํผ์ ๋ฐ๋ผ 32, 64 ๋นํธ ๊ฒฐ์ ๋จ)3, ์ค์๋ Double ์ ์ฌ์ฉํ์.
Int32, UInt8 // signed / unsigned + bit
Int32.min, Int32.max // ์ ์ ๋ฒ์ ์ต๋ ์ต์
Int, UInt // ํ๋ซํผ์ ๋ฐ๋ผ 32bit, 64bit ๊ฒฐ์ ๋จ.
// 0b 0o 0x
let decimal = 8
let binary = 0b1000
let octal = 0o10
let hexadecimal = 0x8
Double // 64 bit - 15์๋ฆฌ ์์์ ์ ํ๋ ๐
Float // 32 bit - 6์๋ฆฌ
// ์ค์ ํํ ๋ฐฉ์
let decimalDouble = 12.1875
let exonentDouble = 1.21875e1
let hexadecimalDouble = 0xC.3p0
// ์ถ๊ฐ ํฌ๋งท ์ฌ์ฉ ๊ฐ๋ฅ.
let paddedDouble = 000123.456
let oneMillion = 1_000_000
let justOverOneMillion = 1_000_000.000_000_1
// ์๋ก ๋ค๋ฅธ ์ ์/์ค์ ๋ผ๋ฆฌ์ ์ฐ์ฐ์๋ ๋ช
์์ ์ธ ํ์
๋ณํ ํ์.
let one = 1
let two: UInt16 = 2
let three = UInt16(1) + 2
let double = Double(one) + 2.376
random(in: )
์ผ๋ก ์์์ ์๋ฅผ ์ฝ๊ฒ ๋ง๋ค ์ ์๋ค.Int.random(in: -1...100)
UInt.random(in: 1...30)
Double.random(in: 2.3..<11.2)
Float.random(in: -1.3..<1.3)
// ์กด์ฌํ๋ ํ์
์ ๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ์ ์
typealias Sample = Int
typealias VideoCell = UICollectionViewVideoCell
let ์ง์ง: Bool = true // != 1
let ๊ฐ์ง: Bool = false // != 0
// ์ฌ๋ฌ ํ์
์ ๋ฌถ์ด์ ์ ๊ณต.
let http404Error = (404, "Not Found")
let xyz = (10, 3, 1)
// ๊ตฌ์กฐ ๋ถํด ํ ๋น ๊ฐ๋ฅ.
let (statusCode, statusMessage) = http404Error
let (statusCode, _) = http404Error
// ์ด๋ฆ์ผ๋ก ์ ๊ทผ ๊ฐ๋ฅ
let http200Status = (statusCode: 200, description: "OK")
print(http200Status.description)
๊ฐ์ด ์์ผ๋ฉด -> ํ์ด์ ๊ฐ์ ์ ๊ทผ ๊ฐ๋ฅ
๊ฐ์ด ์์ผ๋ฉด -> nil
var surveyAnswer: String? // = nil ํ์ง ์์๋ nil๋ก ์ด๊ธฐํ.
๐ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
enum ์ผ๋ก ๊ตฌํ๋์ด ์์. -> switch ๋ฅผ ํตํ ๊ฒ์ฌ ๊ฐ๋ฅ. -> where ์ ๊ณผ ํฉ์น๋ฉด ์ธ๋ถ์ฌํญ๊น์ง๋ ์ฝ๋๋ก ๊ตฌํ ๊ฐ๋ฅ -> ํ์ง๋ง ๊ท์ฐฎ์์ Optinal Binding ๋ฑ์ ๋ฐฉ๋ฒ ์ฌ์ฉ.
public enum Optinal<Wrapped>: ExpressibleByNilLiteral {
case none
case some(Wrapped)
public init(_ some: Wrapped) {
// ...
}
}
๊ฐ์ ์ธ๋ํ !
if surveyAnswer != nil {
print(surveyAnswer!)
}
if let ๊ตฌ๋ฌธ.
if let actualNumber = Int(possibleNumber) {
print("The string \"\(possibleNumber)\" has an integer value of \(actualNumber)")
} else {
print("The string \"\(possibleNumber)\" could not be converted to an integer")
}
๐ ์ฌ์ฉํ๋ ์์.
// ์ต์
๋ ์ ์ ์งํ์ ๊ฐ์ ํญ์ ๊ฐ์ง๋ฉด (== nil์ด ๋ ์ผ์ด ์์ผ๋ฉด)
let possibleString: String? = "An optional string."
let forcedString: String = possibleString!
// String! ํ์
์ผ๋ก ์ธ ์ ์์.
var assumedString: String! = "An implicitly unwrapped optional string."
let implicitString: String = assumedString
assumedString = nil // ๊ฐ๋ฅํ๊ธด ํ๋ฐ,
print(assumedString) // nil ์ด ํ ๋น๋์ด ์์ ๋ ์ ๊ทผํ๋ฉด ์ค๋ฅ
@IBAction private var label: UILabel!
func canThrowAnError() throws {
// this function may or may not throw an error
}
do {
try canThrowAnError()
// no error was thrown
} catch ํน์ ์๋ฌ {
// an error was thrown
} catch ์ธ์๋ฅผ๊ฐ์ง๋ํน์ ์๋ฌ(let ์ธ์) {
} catch {
// ์์์ ์์กํ ๋ชจ๋ ์๋ฌ ์ก์.
}
๋ฐํ์์์ ๋ฐ์ํ๋ ์กฐ๊ฑด.
์ ์ ์กฐ๊ฑด์ด true ์ด๋ฉด ๋ค์ ์ฝ๋๊ฐ ์งํ๋๊ณ ,
false ๋ฉด ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๊ณ ์ฝ๋ ์คํ๊ณผ ์ฑ์ด ์ข
๋ฃ๋๋ค.
์ ํจํ์ง ์์ ์ํ๋ฅผ ๋ง์์ ํผํด๋ฅผ ์ ํ.
์ฐจ์ด๋?
Assertion - ๊ฐ๋ฐ ์ค์ ์ค์๊ฐ ๋ฐ์ํ์ ๋ ๋๋ฒ๊น
ํ๋๋ฐ ์ฌ์ฉ. (debug build ์์๋ง ์ฌ์ฉ)
let age = -3
assert(age >= 0, "A person's age can't be less than zero.")
// ๋ค์ ์ฝ๋
// ์กฐ๊ฑด์ด ์ด๋ฏธ ์ฒดํฌ๋์์ ๋๋ assertionFailure ๋ฅผ ์ธ ์ ์์.
if age > 10 {
print("You can ride the roller-coaster or the ferris wheel.")
} else if age >= 0 {
print("You can ride the ferris wheel.")
} else {
assertionFailure("A person's age can't be less than zero.")
}
Precondition - debug / production build ์์ ๋ชจ๋ ์ฌ์ฉ.
precondition(index > 0, "Index must be greater than zero.")
preconditionFailure(_:file:line:)
assertion / assertionFailure
precondition / preconditionFailure ๋ ๋ ์ฒดํฌ ํ๋์ง ์ํ๋์ง์ ๋ฐ๋ฅธ ์กฐ๊ฑด์ด ์ข ๋ค๋ฅด์ง๋ง
-> ์ปดํ์ผ Optimization level ์ ๋ฐ๋ผ ์ฒดํฌ ํ๋์ง ์ํ๋์ง๊ฐ ์ข ๋ฌ๋ผ์ง๋ค.
https://eunjin3786.tistory.com/453
๋จํญ / ์ดํญ / ์ผํญ ์ฐ์ฐ์
์ฐ์ฐ์ / ํผ์ฐ์ฐ์
let x = 20
if x = 20 // ๋ถ๊ฐ๋ฅ. js ์ ํํ์์ฒ๋ผ ๊ฐ์ ๋ฐํํ์ง ์์.
+= -= *= /= %=
+ - * / %
// ๋จํญ
-3 // -3
+(-3) // -3
== != > < >= <=
**๐ === !== (์ฐธ์กฐ๊ฐ ๊ฐ๋ค ๋ค๋ฅด๋ค) ~= (ํจํด ๋งค์น)**
// ํํ์ ๊ฒฝ์ฐ ์ผ์ชฝ ๊ฐ์ ๋น๊ตํ๊ณ , ๊ฐ์ผ๋ฉด ๊ทธ ๋ค์ ๊ฐ ...
(1, 2, 3) < (1, 2, 4) // true
(1, 2, 3) == (1, 2, 3) // true
// question ์ด true ์ด๋ฉด answer1 ์๋๋ฉด answer2
question ? answer1 : answer2
a ?? b
a != nil ? a! : b // ์ด๊ฒ๊ณผ ๊ฐ์.
1...5 // 1~5
1..<5 // 1~4
2...
...2
..<2
for i in 1..<5 {
// ์ด๋ฐ ์์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅ.
}
// ์ด๋์ ์์ํ ์ง ํ์คํ ๊ฒฝ์ฐ๋ง ์์ ๊ฐ ์๋ต ๊ฐ๋ฅ.
for name in names[...5] {
print(name)
}
! && ||