假设我想要一个UIView子类,一个String,一个Int.

如果我只是将UIView子类化,那么在Swift中如何实现这一点?如果我只是创建了一个自定义init()函数,但参数是一个字符串和一个Int,它会告诉我"super.init()在从初始值设定项返回之前不会被调用".

如果我拨打super.init(),系统会告诉我必须使用指定的初始值设定项.我应该在那里用什么呢?帧版本?编码器版本?两个都要吗?为什么?

推荐答案

init(frame:)版本是默认的初始值设定项.只有在初始化实例变量后才能调用它.如果此视图是从Nib重新构建的,则不会调用自定义初始值设定项,而是会调用init?(coder:)版本.由于Swift现在需要实现所需的init?(coder:),我更新了下面的示例,并将let变量声明更改为var和可选.在本例中,您将在awakeFromNib()或稍后的某个时间初始化它们.

class TestView : UIView {
    var s: String?
    var i: Int?
    init(s: String, i: Int) {
        self.s = s
        self.i = i
        super.init(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }
}

Ios相关问答推荐

UIImage大小调整工作,但转换为上传数据时恢复到原始大小

如何在SwiftUI中以一定Angular 绘制直线(&A)

使用AVCaptureEventInteraction捕获音量按键快门

IOS-获取本地化系统映像

如何在KMM项目中处理PHPickerViewController的回调?

无法向委托发送数据

不使用故事板创建 iMessage 应用程序

查找东南亚语言(泰语、高棉语、老挝语、缅甸语)中的单词边界

在 SwiftUI 中放置全局 NavigationPath 的位置

具有线性渐变的 SVG textPath 在 Safari 中损坏

如何解码没有名称的 JSON 数组?

如何识别 SwiftUI 中点击的按钮 ID 以使该按钮动画化?

快速禁用 UITextfield 的用户输入

在代码生成的 UIView 上绘制 UIBezierPath

如何在 Xcode 4 中切换 .h 和 .m

无论我将构建版本或应用程序版本更改为什么,都会出现 ITEMS-4238冗余二进制上传错误

如何在上传到服务器之前在 iOS 上压缩/调整图像大小?

如何使用 presentModalViewController 创建透明视图

使用 xib 创建可重用的 UIView(并从情节提要中加载)

在两个或多个 iPhone 应用程序之间共享数据