A solução de Sam já é ótima, apesar de não levar em conta pacotes diferentes (o NSBundle: forClass vem em socorro) e requer carregamento manual, também conhecido como código de digitação.
Se você deseja suporte completo para seus Xib Outlets, pacotes diferentes (use em estruturas!) E obtenha uma boa visualização no Storyboard, tente o seguinte:
// NibLoadingView.swift
import UIKit
/* Usage:
- Subclass your UIView from NibLoadView to automatically load an Xib with the same name as your class
- Set the class name to File's Owner in the Xib file
*/
@IBDesignable
class NibLoadingView: UIView {
@IBOutlet weak var view: UIView!
override init(frame: CGRect) {
super.init(frame: frame)
nibSetup()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
nibSetup()
}
private func nibSetup() {
backgroundColor = .clearColor()
view = loadViewFromNib()
view.frame = bounds
view.autoresizingMask = [.FlexibleWidth, .FlexibleHeight]
view.translatesAutoresizingMaskIntoConstraints = true
addSubview(view)
}
private func loadViewFromNib() -> UIView {
let bundle = NSBundle(forClass: self.dynamicType)
let nib = UINib(nibName: String(self.dynamicType), bundle: bundle)
let nibView = nib.instantiateWithOwner(self, options: nil).first as! UIView
return nibView
}
}
Use seu xib como de costume, ou seja, conecte Outlets ao File Owner e defina a classe File Owner para sua própria classe.
Uso: basta subclassificar sua própria classe View de NibLoadingView e definir o nome da classe como Proprietário do arquivo no arquivo Xib
Não é mais necessário código adicional.
Créditos onde o crédito é devido: bifurcou-o com pequenas alterações de DenHeadless no GH. Minha essência: https://gist.github.com/winkelsdorf/16c481f274134718946328b6e2c9a4d8