Storyboard를 최대한 사용하지 않고 Swift로 Giithub을 한눈에 볼 수 있는 issues와pull requests의 앱을 제작한다
그래서 관리하고 싶어서 swift로 프로그램을 만들었어요.
이번에는 스위프트를 터치해보고 싶어서 스토리보드는 되도록 쓰지 않고 코드라는 이단적인 방법으로만 만들었다.
스토리보드에서 할 수 있는 일을 코드로 쓰기 때문에 코드가 늘어나고 전망이 나빠지기 때문에 어떻게 하는 스와프트에서 어려운 일을 정리해야 한다.
저는 개인적으로 Storyboard를 별로 좋아하지 않아서 코드와playground의 일파를 잘 사용하고 싶어요.스토리보드는 편하지만
(이런 거)
개인이 세부 팀 내에서 쓰면 좋은 애플리케이션이기 때문에 출시하지 않고 티스트 플라이트로 보낼 계획이다.
bonegollira/GitOdo
그럼, 이것이 내가 신경 쓰는 중점이다
뷰와 논리 분리
Storyboard를 사용하지 않으면View의 속성 설정과 논리가 혼동
extension
로 구분됩니다protocol ViewComponentLayout {
func render ()
}
// Viewに関するコード
// funcは基本的にconfigure__***とautolayout__***の2種類
extension TableHeaderView: ViewComponentLayout {
// configure__***でプロパティのセット
func configure__self () {
self.contentView.backgroundColor = UIColor.whiteColor()
}
func configure__titleLabel () {
self.titleLabel.font = UIFont(name: "Helvetica-Bold", size: 12)
self.titleLabel.textColor = UIColor.blackColor()
self.titleLabel.setTranslatesAutoresizingMaskIntoConstraints(false)
}
// autolayout__***でautolayoutの設定
// Cartographyを使ってます
func autolayout__titleLabel () {
layout(self.titleLabel) { titleLabel in
titleLabel.left == (titleLabel.superview!.left + 20) ~ 250
titleLabel.right == (titleLabel.superview!.right - 20) ~ 250
titleLabel.bottom == titleLabel.superview!.bottom - 5
}
}
// このview自体はaddSubviewせずrenderを呼ぶ
// addSubview、configure、autolayoutを設定
func render () {
self.contentView.addSubview(self.titleLabel)
self.configure__titleLabel()
self.autolayout__titleLabel()
}
}
// ロジックのコード
class TableHeaderView: UITableViewHeaderFooterView {
class var identifier: String {
return "TableHeaderView"
}
// viewパーツの初期化はこちらで
let titleLabel = UILabel()
var sectionName: String? {
get {
return self.titleLabel.text
}
set {
self.titleLabel.text = newValue
}
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override init(frame: CGRect) {
super.init(frame: frame)
}
override init(reuseIdentifier: String?) {
super.init(reuseIdentifier: reuseIdentifier)
self.render()
}
}
쓰여 있다extension
에서 Storyboard를 통해 완성된 View 설정class
를 통해 논리쓰여 있다.
그냥 스토리보드의 강점이에요.
ViewController
상호 연결오류가 너무 많아요.
잘못 썼어요. swift랑 상관없어요.
SourceKit가 붕괴되어 자꾸만
orz
코코팟으로 넣을 수 없나요?
Swift로 쓴 라이브러리 지원은 코코팟 버전 0.36에서 시작한 것 같아요.
사용하는 버전이 0.35이기 때문에 업데이트를 피합니다
http://www.infoq.com/jp/news/2015/01/cocoapods-adds-swift-framework
Dictionary 안에 있으면 안 돼요?
하면, 만약, 만약...
@selector는 어떻게 썼습니까?
UIBarButtonItem(
barButtonSystemItem: .Add,
target: self,
action: "someMethod:"
)
스트링으로 쓰면 돼요.학급 방법은 어떻습니까?
class Class {
class func classMethod () {
// do something...
}
}
클래스 변수는 어떻게 합니까?
// getを省略してるで
class var identifier: String {
return "tableViewCell"
}
http://qiita.com/takkyun/items/384013e52f404773893b 에서 속성을 상세하게 정리했다.
사용자 정의된 UItable ViewCell이 init 설치에 대해 불평을 받습니까?
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
}
// を実装すると
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
// を求められる
및 NSNull()
를 설치하지 않으면 오류가 발생합니다.이것을 쓰면 바로 움직여서 원인을 모르겠다.선언만 한 하늘의 Dictionary를 만들고 싶다고요?
옵티올까지 합치면 빙글빙글 돌기 때문에 번거롭기 때문에 Aray와 Dictionary에 대해서는 최대한 빈 값을 입력해 초기화하세요.
// こっちをしたくない
var list: [String: String]?
// けどこうするとエラー
var list: [String: String] = []
// なのでこうする
let list = [String: String]()
추기
@akuraru선생님이 가르쳐 주셨어요.
var list: [String: String] = [:]
할 수 있어.UItable ViewDataSource를 설치하고 있습니까?
required
정의된 does not conform to protocol 'UITableViewDataSource'
방법이 없기 때문이다.swift 버전 업그레이드 됐어요?매개 변수의 Optional 지정이 바뀌었고 웹상의 낡은
UITableViewDataSource
방법을 복제하면 실행하려고 해도 오류가 발생할 수 있습니다.곱다라니
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
}
보전의 형식으로 넣다.그나저나 나는 타자를 칠 때 틀렸다는 말을 들었다.
생략된 형식의 3가지 연산자는 사용하지 않습니까?
UITableViewDataSource
사용할 수 없을 것 같아요.쓸 수 없음
:?
추기
@YoshimasaAoki선생님이 가르쳐 주셨어요.
let str = nil :? "string"
및 let str = nil ?? "string"
지원didSet을 정의한 녀석, init에서 초기화해도 안 나오나?
// init内で初期化してもdidSetは呼ばれない
var prop: Bool {
didSet {
println(prop)
println(oldValue)
}
}
override init () {
// init内でセットしてもdidSetは呼ばれない
self.prop = true
super.init()
매크로는 어떻게 정의합니까?
public func rgba(r: Int, g: Int, b: Int, a: CGFloat = 1.0) -> UIColor {
let red = CGFloat(r)
let green = CGFloat(g)
let blue = CGFloat(b)
return UIColor(
red: CGFloat(red / 255),
green: CGFloat(green / 255),
blue: CGFloat(blue / 255),
alpha: a
)
}
스위프트는 리팩터 안 되나요?
사용할 수 없음
Autolayout의 설정 시기는 어디에 적당합니까?
??
다 합쳐서 init
그런데 원래 어느 타이밍이 좋을까요?init의 실현에 Required가 요구됩니까?
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
쓰면 용서받을 수 있는데, 왜?
Reference
이 문제에 관하여(Storyboard를 최대한 사용하지 않고 Swift로 Giithub을 한눈에 볼 수 있는 issues와pull requests의 앱을 제작한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/bonegollira/items/d3979f2d7697b63ee3ae텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)