iOS 어플을 개발하는 데 도움이 되는 도구를 많이 만들어 봤어요.
최근에는 "Xcode는 편집기일 뿐"이라고 말하면서 Swift Package Manager를 사용해 개발했다.
(또 업무 중 다른 iOS 엔지니어에게 이 발언을 한 뒤 찬성을 얻지 못했다.)
또 스위프트 애호회 LT에 발표될 예정이었던 이 기사를 보완했다.
개시하다
이번에 만든 것은 다음과 같은 것이다.
DevHelperToolkit
SwiftTemplate
DevHelperToolkit
이것은 내가 개인적으로 개발한'이런 것은 일부러 1부터 쓸 필요가 없다'에서 시작된 도구다.
예컨대
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
)
}
}
URL
와 Date
모두 잘 읽을 수 있습니다.잡담
스위프트 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!
Reference
이 문제에 관하여(iOS 어플을 개발하는 데 도움이 되는 도구를 많이 만들어 봤어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/HaNoHito/items/31a1f3febfaef096e3de
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
말하자면 왜 이런 걸 만들었을까? 회사 내 엔지니어나 다른 사람과 얘기할 때 불만을 느끼면서 이 근처의 일을 손으로 다루는 사람들이 많다고 생각했기 때문이다.
이번 같은 건 분명히 노력할 곳은 아니지만 시간이 걸릴 거야.(하나씩 쌓는 데는 시간이 걸리지 않지만 쌓이는 데는 시간이 오래 걸린다.)
UI/UX, 비즈니스 논리, 응용 프로그램으로서 가치 있는 부분에 더욱 주의해야 하며, 이외에 가능한 한 게으름을 피우는 것이 좋다.
그런 이유로 해봤어요.
그래서 여러분, Happy programing with Swift!
Reference
이 문제에 관하여(iOS 어플을 개발하는 데 도움이 되는 도구를 많이 만들어 봤어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/HaNoHito/items/31a1f3febfaef096e3de텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)