我正在将我的Objective-C代码转换为Swift,并且想知道这个代码的swift等价是什么
[[[NSBundle mainBundle] loadNibNamed:@"Games-New" owner:nil
options:nil] firstObject];
感谢。
答案 0 :(得分:28)
也许API已经改变了。 loadNibNamed
的第三个参数不再是options
,而是topLevelObjects
。以下代码适用于我:
var objects: NSArray?
NSBundle.mainBundle().loadNibNamed("MyView", owner: self, topLevelObjects: &objects)
答案 1 :(得分:16)
NSBundle.mainBundle().loadNibNamed("Games-New", owner: nil, options: nil)[0]
答案 2 :(得分:13)
这是一个UIView扩展
public extension UIView {
public class func instantiateFromNib<T: UIView>(viewType: T.Type) -> T {
return NSBundle.mainBundle().loadNibNamed(String(describing: viewType), owner: nil, options: nil)?.first as! T
}
public class func instantiateFromNib() -> Self {
return instantiateFromNib(self)
}
}
用法
let awesomeView = AwesomeView.instantiateFromNib()
OR
let awesomeView = UIView.instantiateFromNib(AwesomeView.self)
答案 3 :(得分:7)
Swift 3
<小时/> 的名称强>
<强>所有者强>
要指定为nib的File的Owner对象的对象。
选项
包含打开nib文件时使用的选项的字典。
<强>第一强>
如果你没有先定义然后抓取所有视图..所以你需要在集合frist
内抓取一个视图。
Bundle.main.loadNibNamed("yourUIView", owner: self, options: nil)?.first as! yourUIView
答案 4 :(得分:6)
使用它来加载你的笔尖。
let myView = NSBundle.mainBundle().loadNibNamed("MyView", owner: nil, options: nil)[0] as UIView
然后您可以像往常一样将其添加到视图中。
view.addSubview(myView)
答案 5 :(得分:2)
对于Swift 3:
Bundle.main.loadNibNamed("Games-New", owner: nil, options: nil)?[0]
仅供参考:在Swift 3中(非完全)删除了NS
答案 6 :(得分:2)
对于 macOS 和 Swift 4 ,以下内容对我有用:
func loadFromNib(_ nibName: String) -> NSView? {
var topLevelObjects: NSArray?
if Bundle.main.loadNibNamed(NSNib.Name(rawValue: nibName), owner: self, topLevelObjects: &topLevelObjects) {
return topLevelObjects?.first(where: { $0 is NSView } ) as? NSView
} else {
return nil
}
}
答案 7 :(得分:1)
在Swift 4中, NSBundle.mainBundle 更改为 Bundle.main.loadNibNamed
Bundle.main.loadNibNamed("MyDenizbankLoading", owner: nil, options: nil)![0]
答案 8 :(得分:0)
这是在Swift 4中的macOS中如何做的
<强>注册强>
collectionView.register(NSNib(nibNamed: NSNib.Name(rawValue: "Cell"), bundle: nil)!,
forItemWithIdentifier: NSUserInterfaceItemIdentifier(rawValue: "Cell"))
<强>出列强>
func collectionView(_ collectionView: NSCollectionView, itemForRepresentedObjectAt indexPath: IndexPath) -> NSCollectionViewItem {
let item = collectionView.makeItem(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "Cell"), for: indexPath)
guard let cell = item as? Cell else { return item }
let value = values[(indexPath as NSIndexPath).item]
cell.imageView?.setImage(url: value, placeholder: Image(named: NSImage.Name(rawValue: "placeholder")))
return cell
}
答案 9 :(得分:0)
这对我有用
public protocol Scene {
associatedtype Content: View
var view: Content { get }
}
struct V: Scene {
var view: some View {
EmptyView()
}
}