[英]Can we use a nested class for IBDesignable?
我正在 Swift 中开发一个图形库。 代码无法共享,但我在这里做了一个示例(请参阅按钮示例,单选按钮专用于另一个问题)。
我想为我的组件使用命名空间MyGraphicLibrary
: MyGraphicLibrary.Button
而不是MyGraphicLibraryButton
示例 pod 有两个类:
// Independent class
@IBDesignable public class CustomButton: UIButton {
...
}
// Namespace for my components
public class MyGraphicLibrary: NSObject {
}
// Namespaced button
public extension MyGraphicLibrary {
@objc(MyGraphicLibraryButton) @IBDesignable class Button: UIButton {
...
}
}
CustomButton
类在界面构建器中的行为符合预期:我可以轻松地将自定义类添加到按钮(请参阅Main.storyboard
)。
对于嵌套类,无法使用其正常名称( Button
或MyGraphicLibrary.Button
)对其进行设置。
唯一的方法是设置类@objc 名称MyGraphicLibraryButton
; 没有自动完成功能,模块必须设置为none
(这看起来像废话,该类属于 GraphicLibrary 模块)。 删除@objc 名称没有区别。
有没有办法让接口生成器正确处理嵌套类?
我认为,总的来说,您的问题的答案是“不”,您不能以您尝试的方式使用 Objective-C 类。
Interface Builder 正在其接口中寻找 Objective-C 类名称。 Objective-C 为类名提供了一个扁平的空间。 没有嵌套命名空间的概念(这就是为什么你最终会使用像“NS”这样的名称前缀)
您正在尝试使用 Swift 的功能强加命名空间结构,但该结构对 Objective-C 没有意义。 即使你在嵌套的 Swift 上下文中声明了一个 Objective-C 类,它仍然会存在于 Objective-C 类的平面空间中。
Interface Builder 将从该平面空间中提取名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.