[SeSAC] 220801_TIL (깔끔한 코딩, StoryBoard Identifier, UserDefaults, 서버통신, Insomnia, json)
-비어있는 스토리보드, 쓸데없이 긴 주석, 레거시 코드 등은 Xcode상에서 실제로 앱의 기능에는 영향을 미치지 않을수도 있지만 앱의 메모리, 빌드에는 미세한 영향을 끼칠수도 있기 때문에 해당 앱 구현에 의미없다고 판단된다면 미리미리 지워놓는 코딩습관을 가질 필요가 있다.
타입 프로퍼티
프로토콜 파일을 swift 빈 파일로 만들어준뒤
//Reusable.swift
protocol ReusableViewProtocol {
static var reuseIdentifier: String { get }
}
사용하려는 컨트롤러 파일에 , 프로토콜이름 을 작성해주면 에러메시지의 fix를 통해 해당 프로토콜의 요소를 추가해준다
//LocationViewController.swift
class LocationViewController: UIViewController, ReusableViewProtocol {
static var reuseIdentifier: String = "LocationViewController"
}
.
.
.
static var reuseIdentifier: String = "LocationViewController"는 문법상 오류는 없지만 밑줄친 문자열을 제거하는 표현식으로
static var reuseIdentifier: String = String(describing: LocationViewController.self)으로도 작성 가능하다
LocationViewController.self -> 메타타입 = "LocationViewController" (같은 의미를 가지나 문자열 표현을 줄일 수 있다는 장점이 있다
문자열이나 int같은 값이 거의 없도록 코드를 작성한다
searchTableView.register(UINib(nibName: ListTableViewCell.reuseIdentifier, bundle: nil), forCellReuseIdentifier: ListTableViewCell.reuseIdentifier)
ListTableViewCell.reuseIdentifie
class UserDefaultsHelper {
private init() { }
//해당 메서드의 코드들은 메서드 내에서만 사용
//참조의 형식이 깨지는 것을 방지
static let standard = UserDefaultsHelper()
// singleton pattern 자기 자신의 인스턴스를 타입 프로퍼티 형태로 가지고 있음
let userDefaults = UserDefaults.standard
//UserDefaults.standard. + 1.set, 2.integer, 3.string ~
//userdefault의 키 값의 문자열을 실제 구현부 코드에서 없애기위해 열거형에 키 값 넣기
enum Key: String {
case nickname, age
}
var nickname: String {
//연산 프로퍼티 형태 get set
get {
return userDefaults.string(forKey: Key.nickname.rawValue) ?? "대장"// 옵셔널 형태로 String? 으로 하거나 / 타입은 그대로 두고 닉네임이 닐이라면 다른 값들을 넣어준다 ( ?? )
}
set { //연산 프로퍼티 parameter -> newValue
userDefaults.set(newValue, forKey: Key.nickname.rawValue)
}
}
var age: Int {
get {
return userDefaults.integer(forKey: Key.age.rawValue)
}
set {
userDefaults.set(newValue, forKey: Key.age.rawValue)
}
}
}
1.요청이 있어야 응답을 한다.
2.구체적인 요청이 필요하다
3.인증키(Request + 인증키)
method=getLottoNumber&drwNo=1025 >>> 쿼리 스트링
=1025 -> 파라미터 (Limit X(없음))
1.Request
get, post, put, delete -> Http Method 라고 한다
2.Response
Xml - 웹 친화적, Json - 앱 친화적
3.Application Programing Interface(API)
4.Status Code(상태코드)
정확한 정보 -> 초록색으로 표시 ex.200ok..
잘못된 정보면 주황색으로 표시된다.
HTTP 상태코드 규약 -> 1xx, 2xx, 3xx, 4xx, 5xx 등...
5.URL 수신을 위한 Xcode 기본 프레임워크
URLSession Framework 대신
간편한 Alamofire 라이브러리를 사용(현업에서도 많이 활용되는중)
Json serialization 클래스(swift4이전까지 사용)
swift4 이후 -> codable 프로토콜
swiftyjson 오픈소스 - 요청이 잘 되고나서 응답값 처리를 확인함
//Alamofire work with SwityJSON method
//AF: 200 ~ 299 status code -> 알라모파이어에서 디폴트 성공 상태코드
//statuscode를 301까지를 성공코드로 해달라라는 요청이 들어올때는 validate를 통해서 바꾼다 .statuscode
let url = "https://www.dhlottery.co.kr/common.do?method=getLottoNumber&drwNo=\(number)"
//validate - 유효성 검사
AF.request(url, method: .get).validate(statusCode: 200..<400).responseJSON { response in
switch response.result {
case .success(let value):
let json = JSON(value)
print("JSON: \(json)")
let bonus = json["bnusNo"].intValue
print(bonus)
let date = json["drwNoDate"].stringValue
print(date)
self.numberTextField.text = date
case .failure(let error):
print(error)
}
}
[SeSAC] 20220808_TIL (API관련 파일 관리하기) (0) | 2022.08.08 |
---|---|
[SeSAC] 220805_TIL (클로저, Sync, Async) (0) | 2022.08.05 |
[SeSAC] 220804_TIL (Serialization, Pagenation) (0) | 2022.08.04 |
[SeSAC] 20220803_TIL (인증키 관리(gitignore), pagenation, 타입 추론의 속도, 소켓 vs HTTP, 일급객체) (1) | 2022.08.03 |
[SeSAC] 220802_TIL (json구조분석, API KEY, REST API) (0) | 2022.08.02 |