상세 컨텐츠

본문 제목

[SeSAC] 220801_TIL (깔끔한 코딩, StoryBoard Identifier, UserDefaults, 서버통신, Insomnia, json)

IOS/TIL

by 카키IOS 2022. 8. 1. 12:44

본문

1.필요없는 스토리보드, 주석, 코드(레거시 코드) 제거하기

-비어있는 스토리보드, 쓸데없이 긴 주석, 레거시 코드 등은 Xcode상에서 실제로 앱의 기능에는 영향을 미치지 않을수도 있지만 앱의 메모리, 빌드에는 미세한 영향을 끼칠수도 있기 때문에 해당 앱 구현에 의미없다고 판단된다면 미리미리 지워놓는 코딩습관을 가질 필요가 있다.

 

2.Storyboard 아이덴티파이어 코드로 생성하기

타입 프로퍼티

프로토콜 파일을 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

 

3.유저디폴트 간략화 

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)
        }
    }
}

 

4.서버통신

1.요청이 있어야 응답을 한다.

2.구체적인 요청이 필요하다

3.인증키(Request + 인증키)

 

method=getLottoNumber&drwNo=1025 >>> 쿼리 스트링

=1025 -> 파라미터 (Limit X(없음))

 

5.Insomnia

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 라이브러리를 사용(현업에서도 많이 활용되는중)

 

6.Json 내용에서 필요한 정보만 정리해서 사용하게 하는법

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)
            }
        }

 

728x90
반응형

관련글 더보기