iOS 어플을 개발하는 데 도움이 되는 도구를 많이 만들어 봤어요.

13603 단어 SwiftiOS
스위프트 애호회 16일째 보도다.
최근에는 "Xcode는 편집기일 뿐"이라고 말하면서 Swift Package Manager를 사용해 개발했다.
(또 업무 중 다른 iOS 엔지니어에게 이 발언을 한 뒤 찬성을 얻지 못했다.)
또 스위프트 애호회 LT에 발표될 예정이었던 이 기사를 보완했다.

개시하다


이번에 만든 것은 다음과 같은 것이다.

  • DevHelperToolkit
  • 대체적으로 설명하면 R.swift 또는SwiftGen이다.

  • SwiftTemplate
  • Xcode용 Swift 템플릿입니다.
  • DevHelperToolkit


    이것은 내가 개인적으로 개발한'이런 것은 일부러 1부터 쓸 필요가 없다'에서 시작된 도구다.
    예컨대
  • 웹 API 액세스, JSON에서 얻은 데이터 모델
  • 적용된 색상 모드를 UIColor
  • 로 정의합니다.
  • 이미지 자산 확보UIImage(named: "hoge")
  • 잠깐만요.
    적는 게 귀찮지 않을까 싶어서 직접 해봤는데 불만 해소형 개발의 산물이었다.
    사용 상세 정보는 GiitHub의 창고를 보시고 JSON에서 데이터 모델을 만드는 방법을 간단하게 설명해 주십시오.

    데이터 모델의 가벼운 제작법


    공구식의 정공법


    하고 싶은 모델 JSON 데려와.
    도구를 실행합니다.
    이상.

    별수


    위에서 말한 바와 같이 URL 문자열을 유지하거나 Optional 값을 가지지 못하는 문제가 존재한다.
    그래서 형은 생각했다.
    JSON으로 데이터 모델의 정의를 적고 데이터 모델을 만들면 되잖아요.
    이렇게 고려해 다음 JSON을 제작하고 도구로 데이터 모델을 만들어 보자.
    simple_data_model.json
    {
        "name": "simple json model",
        "properties": {
            "signed integer": "Int",
            "unsigned integer": "UInt",
            "boolean value": "Bool",
            "string value": "String",
            "optional string value": "String?",
            "int array": "[Int]",
            "dictionary": "[String:Int]",
            "image_url": "URL",
            "upload_date": "Date"
        }
    }
    
    이 데이터 모델에 대해 잘 만들어서 Swift에서 사용할 수 있는 데이터 모델의 인코딩을 생성합니다.
    코드상으로는 아래의 느낌입니다.
    SimpleJsonModel.swift
    import Foundation
    
    struct SimpleJsonModel {
        let booleanValue: Bool
        let unsignedInteger: UInt
        let dictionary: [String:Int]
        let intArray: [Int]
        let optionalStringValue: String?
        let uploadDate: Date
        let stringValue: String
        let imageUrl: URL
        let signedInteger: Int
    }
    
    extension SimpleJsonModel: JSONDecodable {
        static func decode(_ jsonObject: [String:Any]) -> SimpleJsonModel {
            guard let booleanValue = jsonObject["boolean value"] as? Bool else {
                abort()
            }
            guard let unsignedInteger = jsonObject["unsigned integer"] as? UInt else {
                abort()
            }
            guard let dictionary = jsonObject["dictionary"] as? [String:Int] else {
                abort()
            }
            guard let intArray = jsonObject["int array"] as? [Int] else {
                abort()
            }
            let optionalStringValue = jsonObject["optional string value"] as? String
            guard let uploadDateString = jsonObject["upload_date"] as? String, let uploadDate = DateFormatter.iso8601formatter.date(from: uploadDateString) else {
                abort()
            }
            guard let stringValue = jsonObject["string value"] as? String else {
                abort()
            }
            guard let imageUrlString = jsonObject["image_url"] as? String, let imageUrl = URL(string: imageUrlString) else {
                abort()
            }
            guard let signedInteger = jsonObject["signed integer"] as? Int else {
                abort()
            }
            return SimpleJsonModel(
                booleanValue: booleanValue,
                unsignedInteger: unsignedInteger,
                dictionary: dictionary,
                intArray: intArray,
                optionalStringValue: optionalStringValue,
                uploadDate: uploadDate,
                stringValue: stringValue,
                imageUrl: imageUrl,
                signedInteger: signedInteger
            )
        }
    }
    
    URLDate 모두 잘 읽을 수 있습니다.

    잡담


    스위프트 2 시대에는 이런 느낌을 만드는 도구가 어려웠다.
    주요 이유는Swift의 AnyObject와 Any의 차이점였다.
    상속NSObject된 학급이라면 AnyObject로 바뀌었기 때문에 유형 판정이 복잡하다.
    Swift3이 되면 Any로 바뀌기 때문에 형의 판정(Swift2의 시대에 비해)이 수월해진다Objective-C id as Swift Any
    배열이 NSArray인지 Array인지 신경 쓰지 않아도 된다.

    SwiftTemplates


    X코드로 새 파일을 만들 때 Swift 템플릿이 적지 않죠?
    그러니까 없으면 해봐, 해봤어.

    GiitHub의 창고Xcode 개발을 폭발 속도로 만드는 파일 템플릿을 만들어 봤습니다.를 보시면 대략적인 사용법을 알 수 있습니다.

    매듭을 짓다


    말하자면 왜 이런 걸 만들었을까? 회사 내 엔지니어나 다른 사람과 얘기할 때 불만을 느끼면서 이 근처의 일을 손으로 다루는 사람들이 많다고 생각했기 때문이다.
    이번 같은 건 분명히 노력할 곳은 아니지만 시간이 걸릴 거야.(하나씩 쌓는 데는 시간이 걸리지 않지만 쌓이는 데는 시간이 오래 걸린다.)
    UI/UX, 비즈니스 논리, 응용 프로그램으로서 가치 있는 부분에 더욱 주의해야 하며, 이외에 가능한 한 게으름을 피우는 것이 좋다.
    그런 이유로 해봤어요.
    그래서 여러분, Happy programing with Swift!

    좋은 웹페이지 즐겨찾기