Storyboard를 최대한 사용하지 않고 Swift로 Giithub을 한눈에 볼 수 있는 issues와pull requests의 앱을 제작한다

6790 단어 SwiftGitHubiOS
업무 처리 Giithub의 창고는 20개 정도인데, issues가 어디에 있습니까?
그래서 관리하고 싶어서 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 상호 연결
  • View 확인
  • 나는 어떻게 해야 좋을지 모르겠다.

    오류가 너무 많아요.


    잘못 썼어요. 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)
      }
    
    쓰면 용서받을 수 있는데, 왜?

    좋은 웹페이지 즐겨찾기