swiftgen을 사용하여 segueIdentier 관리

2808 단어 SwiftSwiftgen
ios 응용 프로그램 개발의 문제점은 segue Idntifer나 문자열이기 때문에 컴파일할 때 typo를 감지할 수 없습니다.
안드로이드면 R.java가 있는 것 같아요.
http://qiita.com/ksoichiro/items/4befb2695b1efdff72dd
수동으로 엔음 만들 수 있어요.
swiftgen을 사용하면 storyboard에서identifer를 추출하여 enum으로 관리할 수 있습니다.

설치하다.


이것은 홈brew를 사용하는 전제 조건이다.
brew install swiftgen

xcode를 통해build에서 자동으로 생성



프로젝트 상단>Targets(main)>Build Phases+ 선택 버튼new runs script phase다음 코드 추가
swiftgen storyboards ${SRCROOT}/${PRODUCT_NAME}/Base.lproj/Main.storyboard > ${SRCROOT}/${PRODUCT_NAME}/storyboardAutoGen.swift
storyboard의 방치 장소
전제는<<プロジェクト名>>/Base.lproj/Main.storyboard이다.
나중에 구축할 때 코드 생성이 계속됩니다.
생성된 코드는 이런 느낌입니다.
// Generated using SwiftGen, by O.Halligon — https://github.com/AliSoftware/SwiftGen

import Foundation
import UIKit

protocol StoryboardScene {
  static var storyboardName : String { get }
}

extension StoryboardScene {
  static func storyboard() -> UIStoryboard {
    return UIStoryboard(name: self.storyboardName, bundle: nil)
  }

  static func initialViewController() -> UIViewController {
    return storyboard().instantiateInitialViewController()!
  }
}

extension StoryboardScene where Self: RawRepresentable, Self.RawValue == String {
  func viewController() -> UIViewController {
    return Self.storyboard().instantiateViewControllerWithIdentifier(self.rawValue)
  }
  static func viewController(identifier: Self) -> UIViewController {
    return identifier.viewController()
  }
}

protocol StoryboardSegue : RawRepresentable { }

extension UIViewController {
  func performSegue<S : StoryboardSegue where S.RawValue == String>(segue: S, sender: AnyObject? = nil) {
    performSegueWithIdentifier(segue.rawValue, sender: sender)
  }
}

extension UIStoryboard {
  struct Scene {
    enum Main : StoryboardScene {
      static let storyboardName = "Main"
    }
  }

  struct Segue {
    enum Main : String, StoryboardSegue {
      case ToCameraViewController = "toCameraViewController"
      case ToPhotoConfirmViewController = "toPhotoConfirmViewController"
    }
  }
}


사용법


befoe:
performSegueWithIdentifier("toCameraViewController", sender: nil)

after:
performSegue(UIStoryboard.Segue.Main.ToCameraViewController , sender: nil)
참조:

좋은 웹페이지 즐겨찾기