// This is a generated file 
// Generated by ResouceKit 
// You can write custom imoprt XXXX logic
import UIKit
import SegueAddition
public protocol ReusableProtocol {
   associatedtype View
   static var name: String { get }
}

public protocol XibProtocol: ReusableProtocol {
	static func nib() -> UINib
	static func view() -> View
}

public extension UITableView {
	public func register<X: XibProtocol>(xib: X.Type) -> Void where X.View: UITableViewCell {
		register(xib.nib(), forCellReuseIdentifier: xib.name)
	}
    
	public func register<X: XibProtocol>(xibs: [X.Type]) -> Void where X.View: UITableViewCell {
		xibs.forEach { register(xib: $0) }
	}
    
	public func dequeueReusableCell<R: ReusableProtocol>(with reusable: R.Type, for indexPath: IndexPath) -> R.View where R.View: UITableViewCell {
		return dequeueReusableCell(withIdentifier: reusable.name, for: indexPath) as! R.View
	}
}

extension UICollectionView {
	public func register<X: XibProtocol>(xib: X.Type) -> Void where X.View: UICollectionViewCell {
		register(xib.nib(), forCellWithReuseIdentifier: xib.name)
	}
    
	public func register<X: XibProtocol>(xibs: [X.Type]) -> Void where X.View: UICollectionViewCell {
		xibs.forEach { register(xib: $0) }
	}
    
	public func dequeueReusableCell<R: ReusableProtocol>(with reusable: R.Type, for indexPath: IndexPath) -> R.View where R.View: UICollectionViewCell {
		return dequeueReusableCell(withReuseIdentifier: reusable.name, for: indexPath) as! R.View
	}
}

extension ViewController {
	@objc open class func instanceFromInstanceFromOverride() -> ViewController {
		let storyboard = UIStoryboard(name: "InstanceFromOverride", bundle: nil) 
		let viewController = storyboard.instantiateViewController(withIdentifier: "BaseInstance") as! ViewController
		return viewController
	}
	@objc open class func initialViewController() -> ViewController {
		let storyboard = UIStoryboard(name: "ViewController", bundle: nil) 
		let viewController = storyboard.instantiateInitialViewController() as! ViewController
		return viewController
	}

	@objc open func performSegueShowSecondTable(closure: ((UIStoryboardSegue) -> Void)? = nil) {
		performSegue("ShowSecondTable", closure: closure)
	}

	public struct Segue {
		public static let showSecondTable: String = "ShowSecondTable"
	}
}

extension TableViewController {
	@objc open class func instanceFromTabBarController() -> TableViewController {
		let storyboard = UIStoryboard(name: "TabBarController", bundle: nil) 
		let viewController = storyboard.instantiateViewController(withIdentifier: "TableView") as! TableViewController
		return viewController
	}

	@objc open func performSegueShowViewController(closure: ((UIStoryboardSegue) -> Void)? = nil) {
		performSegue("ShowViewController", closure: closure)
	}

	public struct Segue {
		public static let showViewController: String = "ShowViewController"
	}
}

extension OverrideViewController {
	@objc open class func instanceFromInstanceFromOverrideOtherIdentifier() -> OverrideViewController {
		let storyboard = UIStoryboard(name: "InstanceFromOverride", bundle: nil) 
		let viewController = storyboard.instantiateViewController(withIdentifier: "OtherIdentifier") as! OverrideViewController
		return viewController
	}
	@objc open class func instanceFromInstanceFromOverrideOverrideInstance() -> OverrideViewController {
		let storyboard = UIStoryboard(name: "InstanceFromOverride", bundle: nil) 
		let viewController = storyboard.instantiateViewController(withIdentifier: "OverrideInstance") as! OverrideViewController
		return viewController
	}
	override open class func initialViewController() -> OverrideViewController {
		let storyboard = UIStoryboard(name: "OverrideViewController", bundle: nil) 
		let viewController = storyboard.instantiateInitialViewController() as! OverrideViewController
		return viewController
	}

	override open func performSegueShowSecondTable(closure: ((UIStoryboardSegue) -> Void)? = nil) {
		performSegue("ShowSecondTable", closure: closure)
	}

	public struct Segue {
		public static let showSecondTable: String = "ShowSecondTable"
	}
}

extension SecondTableViewController {
	@objc open class func initialViewController() -> SecondTableViewController {
		let storyboard = UIStoryboard(name: "SecondTableViewController", bundle: nil) 
		let viewController = storyboard.instantiateInitialViewController() as! SecondTableViewController
		return viewController
	}

	@objc open func performSegueShowOverride(closure: ((UIStoryboardSegue) -> Void)? = nil) {
		performSegue("ShowOverride", closure: closure)
	}

	public struct Segue {
		public static let showOverride: String = "ShowOverride"
	}
}

extension CollectionViewController {
	@objc open class func instanceFromTabBarController() -> CollectionViewController {
		let storyboard = UIStoryboard(name: "TabBarController", bundle: nil) 
		let viewController = storyboard.instantiateViewController(withIdentifier: "CollectionView") as! CollectionViewController
		return viewController
	}

	@objc open func performSegueShowViewController(closure: ((UIStoryboardSegue) -> Void)? = nil) {
		performSegue("ShowViewController", closure: closure)
	}

	public struct Segue {
		public static let showViewController: String = "ShowViewController"
	}
}

extension SecondCollectionViewController {
	@objc open class func instanceFromTabBarController() -> SecondCollectionViewController {
		let storyboard = UIStoryboard(name: "TabBarController", bundle: nil) 
		let viewController = storyboard.instantiateViewController(withIdentifier: "SecondCollectionView") as! SecondCollectionViewController
		return viewController
	}
}

extension ObjCOveerrideViewController {
	override open class func initialViewController() -> ObjCOveerrideViewController {
		let storyboard = UIStoryboard(name: "ObjCOverrideViewController", bundle: nil) 
		let viewController = storyboard.instantiateInitialViewController() as! ObjCOveerrideViewController
		return viewController
	}
}

extension ObjCViewController {
	@objc open class func initialViewController() -> ObjCViewController {
		let storyboard = UIStoryboard(name: "ObjCViewController", bundle: nil) 
		let viewController = storyboard.instantiateInitialViewController() as! ObjCViewController
		return viewController
	}
}

extension UITabBarController {
	@objc open class func initialViewController() -> UITabBarController {
		let storyboard = UIStoryboard(name: "TabBarController", bundle: nil) 
		let viewController = storyboard.instantiateInitialViewController() as! UITabBarController
		return viewController
	}
}

extension UINavigationController {
	@objc open class func instanceFromTabBarControllerNav1() -> UINavigationController {
		let storyboard = UIStoryboard(name: "TabBarController", bundle: nil) 
		let viewController = storyboard.instantiateViewController(withIdentifier: "Nav1") as! UINavigationController
		return viewController
	}
	@objc open class func instanceFromTabBarControllerNav2() -> UINavigationController {
		let storyboard = UIStoryboard(name: "TabBarController", bundle: nil) 
		let viewController = storyboard.instantiateViewController(withIdentifier: "Nav2") as! UINavigationController
		return viewController
	}
}


extension SecondTableViewCell {
   public struct Reusable: ReusableProtocol {
       public typealias View = SecondTableViewCell
       public static let name: String = "ReuseIdentifier"
   }
}


extension SecondCollectionViewCell {
   public struct Reusable: ReusableProtocol {
       public typealias View = SecondCollectionViewCell
       public static let name: String = "ReuseIdentifier"
   }
}


extension ObjectiveCTableViewCell {
	public struct Xib: XibProtocol {
		public typealias View = ObjectiveCTableViewCell
		public static let name: String = "ObjectiveCTableViewCell"
       
		public static func nib() -> UINib {
			return UINib(nibName: "ObjectiveCTableViewCell", bundle: Bundle(for: ObjectiveCTableViewCell.classForCoder()))
		}

		public static func view() -> ObjectiveCTableViewCell {
			return nib().instantiate(withOwner: nil, options: nil)[0] as! ObjectiveCTableViewCell
		}

	}
}
extension TableViewCell {
	public struct Xib: XibProtocol {
		public typealias View = TableViewCell
		public static let name: String = "TableViewCell"
       
		public static func nib() -> UINib {
			return UINib(nibName: "TableViewCell", bundle: Bundle(for: TableViewCell.classForCoder()))
		}

		public static func view() -> TableViewCell {
			return nib().instantiate(withOwner: nil, options: nil)[0] as! TableViewCell
		}

	}
}
extension CollectionViewCell {
	public struct Xib: XibProtocol {
		public typealias View = CollectionViewCell
		public static let name: String = "CollectionViewCell"
       
		public static func nib() -> UINib {
			return UINib(nibName: "CollectionViewCell", bundle: Bundle(for: CollectionViewCell.classForCoder()))
		}

		public static func view() -> CollectionViewCell {
			return nib().instantiate(withOwner: nil, options: nil)[0] as! CollectionViewCell
		}

	}
}
extension CustomView {
	public struct Xib: XibProtocol {
		public typealias View = CustomView
		public static let name: String = "CustomView"
       
		public static func nib() -> UINib {
			return UINib(nibName: "CustomView", bundle: Bundle(for: CustomView.classForCoder()))
		}

		public static func view() -> CustomView {
			return nib().instantiate(withOwner: nil, options: nil)[0] as! CustomView
		}

	}
}

extension UIImage {
	public struct Asset {
		public static let curry: UIImage = UIImage(named: "curry")!
		public static let kaki: UIImage = UIImage(named: "kaki")!
		public static let ebi: UIImage = UIImage(named: "ebi")!
		public static let marudaizu: UIImage = UIImage(named: "marudaizu")!
		public static let kikkoman: UIImage = UIImage(named: "kikkoman")!
		public static let koumi: UIImage = UIImage(named: "koumi")!
		public static let ninniku: UIImage = UIImage(named: "ninniku")!
		public static let kake: UIImage = UIImage(named: "kake")!
		public static let koori: UIImage = UIImage(named: "koori")!
		public static let inaka: UIImage = UIImage(named: "inaka")!
		public static let siro: UIImage = UIImage(named: "siro")!
		public static let ususio: UIImage = UIImage(named: "ususio")!
	}

	public struct Resource {
		public static let swift_logo: UIImage = UIImage(named: "swift_logo")!
	}

}

extension String {
	public struct Localized {
		public static let helloworld = NSLocalizedString("helloworld", comment: "")
		public static let hello_world_3 = NSLocalizedString("hello world 3", comment: "")
		public static let hello_world_09 = NSLocalizedString("hello(world 09", comment: "")
		public static let hello_world_06 = NSLocalizedString("hello!world 06", comment: "")
		public static let hello_world_07 = NSLocalizedString("hello?world 07", comment: "")
		public static let hello_world_08 = NSLocalizedString("hello,world 08", comment: "")
		public static let hello_world_1 = NSLocalizedString("hello world 1", comment: "")
		public static let hello_world_11___ = NSLocalizedString("hello}world 11 %@", comment: "")
		public static let hello_world_12___ = NSLocalizedString("hello}world 12 %@", comment: "")
		public static let hello_world_10 = NSLocalizedString("hello}world 10", comment: "")
		public static let hello_world_4 = NSLocalizedString("hello world 4", comment: "")
		public static let hello_world_2 = NSLocalizedString("hello world 2", comment: "")
		public static let hello_world_05 = NSLocalizedString("hello.world 05", comment: "")
	}
}
