1. ๊ฐ๋
์ฑ๊ณต๊ณผ ์คํจ๋ฅผ ๋ํ๋ด๋ 2๊ฐ์ง์ ๊ฒฝ์ฐ๋ฅผ ๊ฐ์ง๋ฉฐ, ๊ฐ๊ฐ์ ๊ฒฝ์ฐ์ ์ฐ๊ด๊ฐ์ ํฌํจํ๋ ํ์ ์ด๋ค.
2. ํน์ง
- throws ํค์๋์ ๋น์ทํ์ง๋ง, ์ค๋ฅ๋ฅผ ์ ์ฅํ๊ณ ๋์ค์ ์ฒ๋ฆฌํ ์ ์๋ค.
- ์ค๋ฅ๋ฅผ ๊ฐ๋ ฅํ๊ฒ ํ์ ์ฒดํฌํ ์ ์์ผ๋ฉฐ, ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ๋ค๋ฃจ๊ธฐ ๋๋ฌธ์ ์ค๋ฅ๋ฅผ ๋์น๋ ์ผ์ด ์๋ค.
- ์ค์ ์๋ฌ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ํ์ํ ์ํ(state)๋ณด๋ค ๋ ๋ง์ ๋ถํ์ํ ์ํ๋ฅผ ์ถ๊ฐ๋ก ์ฒ๋ฆฌํด์ผ ํ ์ ์๋ค. ๋จ์ง ์ฒ๋ฆฌํ๊ณ ์ ํ๋ ๊ฒฐ๊ณผ์ ์ํ๋ ์ฑ๊ณต๊ณผ ์คํจ์ผ ๋ฟ์ธ๋ฐ, ์ด๋ด ๋ result ํ์ ์ ์ฐ๋ฉด ๋๋ค.
3. ์ฝ๋
- ๊ธฐ์กด์ do-catch, try, throw๋ฅผ ํตํด ์๋ฌ ์ฒ๋ฆฌํ๋ ์ฝ๋
import Foundation
enum FileError: Error {
case fileNotFound
case unreadable
case encodingFailed
}
func readFile(at path: String) throws -> String {
guard let fileURL = URL(string: path) else {
throw FileError.fileNotFound
}
guard let fileContents = try? String(contentsOf: fileURL) else {
throw FileError.unreadable
}
if fileContents.isEmpty {
throw FileError.encodingFailed
}
return fileContents
}
do {
let content = try readFile(at: "path/to/file.txt")
print("ํ์ผ ๋ด์ฉ: \\(content)")
} catch FileError.fileNotFound {
print("ํ์ผ์ ์ฐพ์ ์ ์์ต๋๋ค.")
} catch FileError.unreadable {
print("ํ์ผ์ ์ฝ์ ์ ์์ต๋๋ค.")
} catch FileError.encodingFailed {
print("ํ์ผ ๋ด์ฉ์ ์ธ์ฝ๋ฉํ ์ ์์ต๋๋ค.")
} catch {
print("์์์น ๋ชปํ ์ค๋ฅ: \\(error).")
}
- result ์ ์ฉํ ์ฝ๋
import Foundation
enum FileError: Error {
case fileNotFound
case unreadable
case encodingFailed
}
func readFile(at path: String, completion: @escaping (Result<String, FileError>) -> Void) {
guard let fileURL = URL(string: path) else {
completion(.failure(.fileNotFound))
return
}
guard let fileContents = try? String(contentsOf: fileURL) else {
completion(.failure(.unreadable))
return
}
if fileContents.isEmpty {
completion(.failure(.encodingFailed))
return
}
completion(.success(fileContents))
}
readFile(at: "path/to/file.txt") { result in
switch result {
case .success(let content):
print("ํ์ผ ๋ด์ฉ: \\(content)")
case .failure(let error):
switch error {
case .fileNotFound:
print("ํ์ผ์ ์ฐพ์ ์ ์์ต๋๋ค.")
case .unreadable:
print("ํ์ผ์ ์ฝ์ ์ ์์ต๋๋ค.")
case .encodingFailed:
print("ํ์ผ ๋ด์ฉ์ ์ธ์ฝ๋ฉํ ์ ์์ต๋๋ค.")
}
}
}
4. ์ฐธ๊ณ ์๋ฃ
'Swift ๊ธฐ๋ณธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] Hashable ํ๋กํ ์ฝ (0) | 2024.05.24 |
---|---|
[Swift] enumerated() (0) | 2024.05.24 |
[Swift] ์ด๊ฑฐํ(Enumeration) (0) | 2024.02.26 |
[Swift] ํ์ ์บ์คํ (Type Casting) (0) | 2024.02.02 |