일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- CoreLocation
- 러닝기록앱
- 서체관리자
- UICollectionViewFlowLayout
- MKMapViewDelegate
- dispatchsource
- weak var
- Protocol
- WeatherManager
- weatherKit
- AnyObject
- Xcode
- Timer
- 한국어 개인정보처리방침
- SwiftUI Boolean 값
- font book
- swift
- addannotation
- 영문 개인정보처리방침
- App Store Connect
- RunningTimer
- Required Reason API
- 러닝타이머
- xcode로 날씨앱 만들기
- MKMapItem
- 단일 책임원칙
- 클로저의 캡슐화
- UIAlertAction
- CLLocationManagerDelegate
- Startign Assignments
Archives
- Today
- Total
VesselWheel
구조체(Struct)에 대해서 설명해주세요. 어떤 경우 사용하나요? 본문
- 구조체 (Structures)는 프로그램 코드의 구성 요소가 되는 범용의 유연한 구조입니다.
- 상수, 변수, 그리고 함수를 정의하는 것과 같은 구문을 사용하여 구조체와 클래스에 프로퍼티와 메서드를 기능적으로 추가할 수 있습니다.
- 구조체는프로퍼티에 값을 저장하거나 메서드를 통해 기능을 제공하고 이걸 하나로 캡슐화할 수 있는 사용자 정의 타입입니다.
- 생성자(initializer)를 정의하지 않으면 구조체가 자동으로 생성자(Memberwise Initializer.)를 제공합니다.
- 여기서 값타입 이란?
- 값 타입은 변수나 상수에 할당될 때 값의 복사본이 생성되는 타입입니다. 주로 구조체(Structures), 열거형(Enumerations), 기본 데이터 타입(Int, Double, Bool, 등)이 값 타입에 해당합니다.
- 날씨 API 호출할 때, DTO를 정의하게 되는데, 서버에서 데이터를 호출할 때 정의되는 프로퍼티를 구조체로 선언하여 값타입으로 서버에 있는 데이터를 복사하여 호출할 수 있습니다.
1. 날씨 앱에서 API를 호출할 때 Struct WeatherData
더보기
//
// WeatherModel.swift
// Weather777
//
// Created by Jason Yang on 2/5/24.
//
import Foundation
// MARK: - WeatherData
struct WeatherData: Codable {
let cod: String
let message, cnt: Int
let list: [List]
let city: City
}
// MARK: - City
struct City: Codable {
let id: Int
let name: String
let coord: Coord
let country: String
let population, timezone, sunrise, sunset: Int
}
// MARK: - Coord
struct Coord: Codable {
var id: Int?
var lat, lon: Double
}
extension Coord {
init(lat: Double, lon: Double) {
self.id = UUID().hashValue
self.lat = lat
self.lon = lon
}
}
// MARK: - List
struct List: Codable {
let dt: Int
let main: MainClass
let weather: [Weather]
let clouds: Clouds
let wind: Wind
let visibility: Int
let pop: Double
let sys: Sys
let dtTxt: String
let rain: Rain?
enum CodingKeys: String, CodingKey {
case dt, main, weather, clouds, wind, visibility, pop, sys
case dtTxt = "dt_txt"
case rain
}
}
// MARK: - Clouds
struct Clouds: Codable {
let all: Int
}
// MARK: - MainClass
struct MainClass: Codable {
let temp, feelsLike, tempMin, tempMax: Double
let pressure, seaLevel, grndLevel, humidity: Int
let tempKf: Double
enum CodingKeys: String, CodingKey {
case temp
case feelsLike = "feels_like"
case tempMin = "temp_min"
case tempMax = "temp_max"
case pressure
case seaLevel = "sea_level"
case grndLevel = "grnd_level"
case humidity
case tempKf = "temp_kf"
}
}
// MARK: - Rain
struct Rain: Codable {
let the3H: Double
enum CodingKeys: String, CodingKey {
case the3H = "3h"
}
}
// MARK: - Sys
struct Sys: Codable {
let pod: Pod
}
enum Pod: String, Codable {
case d = "d"
case n = "n"
}
// MARK: - Weather
struct Weather: Codable {
let id: Int
let main: MainEnum
let description: String
let icon: String
}
enum MainEnum: String, Codable {
case clear = "Clear"
case clouds = "Clouds"
case rain = "Rain"
case snow = "Snow"
}
// MARK: - Wind
struct Wind: Codable {
let speed: Double
let deg: Int
let gust: Double
}
'Grammary in Swift' 카테고리의 다른 글
iOS에서 뷰(View)와 레이어(Layer)의 개념과 차이점에 대해 설명해보세요. (0) | 2024.03.22 |
---|---|
확장(Extension)에 대해서 설명해주세요. (0) | 2024.03.22 |
옵셔널(Optional)에 대해서 설명해주세요. (0) | 2024.03.19 |
클래스와 프로토콜 (0) | 2024.03.18 |
구조체(Struct)의 mutating 키워드에 대해서 설명해주세요. (1) | 2024.03.15 |