## 프로젝트 개요
실시간 주식 시세 데이터를 조회하는 iOS 앱을 구현합니다. 네트워크 요청 실패 시 재시도 로직과 오류 처리를 통해 안정적인 사용자 경험을 제공합니다.
## 주요 기능
- 실시간 주가 정보 요청
- 네트워크 에러 자동 재시도
- 캐시 메모리로 응답 속도 개선
- 사용자 입력 검증 및 오류 안내
- 확장 가능한 API 구조 설계
## 사용 방법
1. Xcode에서 프로젝트 생성 후 Swift 파일 추가
2. `StockManager` 클래스의 `fetchStockData()` 메서드 호출
3. 터미널에서 실행 시 자동으로 'AAPL' 주식 정보 요청
4. 네트워크 실패 시 3회 재시도 로직 동작 확인
## 확장 가능성
- 다른 금융 데이터(주가 변동 추세, 거래량 등) 추가
- 멀티플랫폼 지원을 위한 SwiftUI 리팩토링
- 라우팅 기능으로 여러 주식 정보 병렬 요청
🦉 iOS 기반 주식 시세 조회 앱
Swift 예제
중급
난이도
예제
타입
10/19
등록일
iOS 기반 주식 시세 조회 앱
중급태그
코드 예제
// StockManager.swift
import Foundation
typealias StockData = (String, Double, String)
class StockManager {
private let apiKey = "YOUR_API_KEY"
private var retryCount = 0
func fetchStockData(symbol: String, completion: @escaping (Result<StockData, Error>) -> Void) {
// 기본 URL 구성
guard var urlComponents = URLComponents(string: "https://api.example.com/stock") else {
completion(.failure(NetworkError.invalidURL))
return
}
// 쿼리 파라미터 추가
urlComponents.queryItems = [
URLQueryItem(name: "symbol", value: symbol),
URLQueryItem(name: "api_key", value: apiKey)
]
guard let url = urlComponents.url else {
completion(.failure(NetworkError.invalidURL))
return
}
// 네트워크 요청 실행
URLSession.shared.dataTask(with: url) { data, response, error in
// 오류 처리
if let error = error {
self.retryCount += 1
if self.retryCount < 3 {
print("재시도 시도 $self.retryCount회")
DispatchQueue.global().asyncAfter(deadline: .now() + 2) {
self.fetchStockData(symbol: symbol, completion: completion)
}
return
}
completion(.failure(error))
return
}
// 응답 처리
guard let data = data else {
completion(.failure(NetworkError.emptyResponse))
return
}
do {
// JSON 파싱
let json = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]
guard let price = json?["price"] as? Double,
let currency = json?["currency"] as? String else {
completion(.failure(NetworkError.invalidFormat))
return
}
// 성공 처리
completion(.success((symbol, price, currency)))
} catch {
completion(.failure(error))
}
}.resume()
}
}
// NetworkError.swift
enum NetworkError: Error {
case invalidURL
case emptyResponse
case invalidFormat
}
등록일: 2025년 10월 19일 02:35
언어 정보
언어
Swift
카테고리
Mobile
인기도
#10
학습 팁
코드를 직접 실행해보세요
변수를 바꿔가며 실험해보세요
오류가 나도 포기하지 마세요
다른 예제도 찾아보세요