20 Oct 2017
|
νν
ios
swift
νμ
μ리μ΄μ€
νν
ν ν¨μμμ μ¬λ¬ κ°μ κ°μ 리ν΄ν΄μΌνλ€λ©΄, μ΄ κ°μ λ΄μ μ μλ μ§λ¨ μλ£νμ΄ νμνλ€. μ΄λ¬ν μ§λ¨ μλ£νμ λνμ μΌλ‘ λμ
λ리, λ°°μ΄, νν, ꡬ쑰체, ν΄λμ€κ° μμ
- ννμλ μ¬λ¬ μ’
λ₯μ μλ£νμ΄ λ€μνκ² μμ¬ μ μλ μ μμ
func getUserInfo() -> (Int, String, Character) {
let height = 170
let name = "μλ¦°"
let gender : Character = "F"
//λ°μ΄ν° νμ
μ΄ StringμΌλ‘ μΆλ‘ λ μ μμΌλκΉ νμ
μ΄λ
Έν
μ΄μ
μ μΈ
return (height, name, gender)
}
- ν¨μκ° λ°ννλ ννμ λμ
λ°μ λ³μλ μμλ ννμ μΈλ±μ€λ₯Ό μ΄μ©ν΄μ ννμ λ΄λΆ μμλ₯Ό μ¬μ©ν μ μλ€.
var uInfo = getUserInfo()
uInfo.0 // 170
uInfo.1 // "μλ¦°"
uInfo.2 // "F"
- νν μμ κ°κ°μ λ³μλ‘ μ§μ λ°μ μ μμ
var (a,b,c) = getUserInfo()
a // 170
b // "μλ¦°"
c // "F"
- μΌλΆ νλͺ©μ΄ νμνμ§ μλ€λ©΄ μΈλλ°λ₯Ό μ¬μ©ν΄μ λ³μ ν λΉ μμ΄ κ±΄λλΈ μ μμ
var (height, _, name) = getUserInfo()
- κ° ννμ μμ΄ν
μ ν¨μλ₯Ό λ°νν λ 미리 λ³μμ ν λΉν΄ λ μ μμ.
- μ΄λ κ² νλ©΄ ν¨μλ₯Ό μ€νν λ κ²°κ³Όκ°μ λ°μΈλ©νμ§ μμλ λ¨
func getUserInfo() -> (h: Int, n: String, g: Character) {
let height = 170
let name = "μλ¦°"
let gender : Character = "F"
return (height, name, gender)
}
// κ²°κ³Όκ° λ³μ λμ
λΆλΆ
var result = getUserInfo()
result.h // 170
result.n // "μλ¦°"
result.g // "F"
typealias νμ
μ리μ΄μ€
- μ΄λ¦μ΄ κΈΈκ±°λ μ¬μ©νκΈ° 볡μ‘ν νμ
ννμ μλ‘μ΄ νμ
λͺ
μΌλ‘ μ μν΄μ£Όλ λ¬Έλ²
- νμ
μ리μ΄μ€λ₯Ό μ¬μ©νλ©΄ κΈΈκ³ λ³΅μ‘ν ννμ νμ
ννλ μ§§κ² μ€μΌ μ μμ
- νΉμ νννμ
μ΄ μ¬λ¬ κ³³μμ μ¬μ©λ κ²½μ°μλ νμ
μ리μ΄μ€λ₯Ό ν΅ν΄ μλ‘μ΄ μΆμ½ν νμ
μ μ μνλ κ²μ΄ μ’μ.
typealias <μλ‘μ΄ νμ
μ΄λ¦> = <νμ
νν>
- νμ
μ리μ΄μ€ μ μ μμμ μ¬μ©νλ λ°©λ²
typealias userInfoResult = (Int, String, Character)
//νμ
μ리μ΄μ€ μ¬μ© (userInfoResultλΌλ νμ
μ΄λ¦μ ννν νννμ
κ³Ό κ°μ κ²μΌλ‘ κ°μ£Όν¨)
func getUserInfo() -> userInfoResult {
let height = 170
let name = "μλ¦°"
let gender : Character = "F"
return (height, name, gender)
}
//μ¬μ©λΆμλ μ무 λ³νκ° μλ€.
let info = getUserInfo()
info.0
info.1
info.2
μ¬μ©λΆλΆμλ μ무 λ³νκ° μλλ° μ¬μ©νλ μ΄μ ?
νμ
ννμ μλ‘μ΄ νμ
λͺ
μΌλ‘ μ μν΄μ£Όλ λ¬Έλ². μ£Όλ‘ μ€λ³΅λκ±°λ μ¬μ©νκΈ° 볡μ‘ν νμ
ννμ μ¬μ 립νλ μ©λλ‘ μ¬μ©λλ€.
λ³΄ν΅ λ΄λΆμ μ μΈνλ Nested νμ
μ μ€μ¬μ μλ‘μ΄ νμ
μ΄λ¦μΌλ‘ μ€μ¬μ νννλ μ λ. νν κ°μ ννμ μ΄λ¦μ λΆμ¬μ£Όλ μ©λ.
- νμ
μ리μ΄μ€ λ₯Ό μ¬μ©νμ¬ μΆμ½ νν λ³μκ° λ°μΈλ© λ ννμ μ μν μλ μμ
typealias userInfoResult = (h: Int, n: String, g: Character)
func getUserInfo() -> userInfoResult {
let height = 170
let name = "μλ¦°"
let gender : Character = "F"
return (height, name, gender)
}
let info = getUserInfo()
info.h
info.n
info.g
19 Oct 2017
|
iOS
swift
μ΅μ
λμ κ°λ
-
κ°μ λ°μ±νλ κ°λ
: λ°ννκ³ μ νλ κ°μ μ΅μ
λ κ°μ²΄λ‘ λ€μ ν λ² κ°μΈλ κ°λ
- μ΄λ€ ν λ°μ΄ν°κ° μλλ° κ·Έκ² κ°μ΄ μλλ μλλλ₯Ό ꡬλΆνκΈ°μν΄μ boxingν¨
-
λ³μμ νμ κ°μ΄ μλ€κ³ μκ°νλ©΄ λ‘μ§μ΄ λΆμμ ν΄μ§ μνμ΄ μμΌλκΉ > μ€μννΈλ λ³μμ μ΅μ
λνμ
μ΄λΌλ κ²μ(μ΅μ
λμ΄λΌλ κ°μ²΄) μΆκ°νλ€!
-
μ΅μ
λ λ³μλ μ μμ μΈ λ³νμ΄ λΆκ°λ₯ν μν©μ΄λΌλ©΄ nilκ°μ λ°ννκ³ νλ‘κ·Έλ¨μ΄ μ’
λ£λλ€.
-
nilμ μμ 리ν΄λ μνκ³ νλ‘κ·Έλ¨μ΄ λ©μΆ°λ²λ¦Ό. κ·Έλμ μ½λμ !κ° μμΌλ©΄ μ€μνκ³ μνν ν¬μΈνΈλΌκ³ κ°μ§ν΄μΌν¨
- μΌλ° μλ£νμ nilμ μ΅μ§λ‘ λμ
ν μλ μμ
μ΅μ
λ νμ
μ μΈ
νν : λ³μνμ
?
// ex)String? / Int?
var optInt : Int?
var optStr : String?
// μ΅μ
λ νμ
μ λ³μλ μμμλ κ°λ ν λΉ κ°λ₯
var optInt : Int?
optInt = 3
var optDic : [String : Int]?
optDic = ["κ΅μ΄" : 94, "μν" : 88, "μμ΄" : 96]
μ΅μ
λ κ°μ ν΄μ λ°©λ²
!
: forced unwrapping. λ³μλͺ
μμ λλνλ₯Ό λΆμ¬ κ°μ λ‘ ν΄μ νλ€.
- νμ§λ§ κ°μ΄ nilμ΄ μλμ§ νλ¨ν΄μ κ°μ νμ΄μ£Όλκ² ν¨μ¬ μ’μλ°©λ²μ.
// ex) μμ μ μΌλ‘ 쑰건문 μμμ νΈλ λ°©λ²μ΄ μμ
let possibleNumber = "123"
let convertedNumber = Int(possibleNumber) // Int?νμ
if convertedNumber != nil {
print("convertedNumber has an integer value of \ (convertedNumber!).")
}
Optional binding
- μ΅μ
λ λ°μΈλ©μ μ΅μ
λμ κ°μ΄ μ‘΄μ¬νλμ§λ₯Ό κ²μ¬ν λ€, μ‘΄μ¬νλ€λ©΄ κ·Έ κ°μ λ€λ₯Έ λ³μμ λμ
μμΌμ€λ€.
//if let actual number = nilμ΄ μλλ©΄ λ°μ€λ₯Ό νμ΄μ κ°λ§ λ³μμ λ£μ΄μ£Όκ³ (actualNumber), nilμΈ κ²½μ° elseλ¬Έμμ nilμ 리ν΄νκ³ νλ‘κ·Έλ¨μ΄ λλλ²λ¦Ό. (μμΈμ²λ¦¬λ₯Ό ν΄μΌν¨)
if let actualNumber = Int(possibleNumber) {
print("\"\(possibleNumber)\" has an integer value of \(actualNumber)")
} else {
print("\"\(possibleNumber)\" could not be converted to an integer")
Nil-coalescing
- μ΅μ
λ κ°μ νμ΄μ£Όλ κ°λ
μΌλ‘ μΌνμ°μ°μλ₯Ό νμ©ν΄μ μΈ μ μμ
(μ°μ°μ? : κ°μ νμΈ, λ³κ²½, κ²°ν©νλλ° μ¬μ©νλ νΉλ³ν κΈ°νΈλ 문ꡬ)
μΌν μ°μ°μ
λ³μ = (bool 쑰건) ? μ°ΈμΌλ κ° : κ±°μ§μΌλ κ°
ex)
doBlindDateFlag = (point>=80) ? true : false
- z = (a != nil) ? a! : b
- aκ° nilμ΄ μλλ©΄ zμ λ£μ΄μ£Όκ³ , κ·Έ λ°λμ κ²½μ°μ bλ₯Ό λ£μ΄λΌ
Error Handling
-
μλ₯Όλ€μ΄ readline()κ°μ ν¨μλ 리ν΄νμ
μ΄ μ΅μ
λμ΄λ€. μ¬μ©μκ° κ°μ μ
λ ₯νμ§ μμ μλ μκΈ°λλ¬Έμ΄λ€.
-
κ·Όλ° μμ 리ν΄νμ
μμ΄ throwκ° λΆμ΄μλ ν¨μ : ν¨μλ₯Ό μ²λ¦¬νλ€κ° λ€ λλκΈ° μ μ μ€κ°μ λΉ μ Έμ ν¨μνΈμΆλΆλ‘ λΆλ¬ μ¬ μλ μλ€λ νμ
-
μ΄λ° throwκ° μλ ν¨μλ₯Ό νΈμΆν λλ do - try - catch
λ₯Ό μ¬μ©νλ€.
do
λ‘ λΈλμ κ°μΈκ³
try
λ₯Ό μμ λΆμ¬ ν¨μ νΈμΆ - μ λλ‘ κ·Έ ν¨μ(throwκ° λΆμ΄μλ νΈμΆν ν¨μ)κ° μ€νλλ©΄ tryλ‘ κ°μΌ λ€μ ν¨μ
λ‘ κ°κ³
- catch - μλ¬κ° λ°μνλ©΄ (throwκ° λΆμ΄μλ ν¨μκ° μ€νλλ€κ° μμΈκ° λ°μνμκ²½μ°)catch λΈλμ΄ μ€νλλ€.