【问题标题】:Swift giving all kinds of errorsSwift给出各种错误
【发布时间】:2014-10-25 16:10:49
【问题描述】:

在 Cocoa 中对任何东西进行子类化时,我在使用 Swift 时遇到了很多问题,因此我决定创建一个 MVCE 并将其发布在此处。自己试试吧。

我在 Xcode 中使用以下选项创建了一个简单的 Cocoa 应用程序:

语言:Swift
使用情节提要:否

然后我创建了一个名为 Rectangle 的 NSView 子类:

import Foundation
import Cocoa

class Rectangle: NSView {                //1
    init(frame: NSRect) {                //2
        super.init(frame: frame)         //3
    }                                    //4
}                                        //5

奇怪的是,一些错误在我打字的时候来来去去。编译项目时,出现以下错误:

//2:覆盖声明需要一个“覆盖关键字”
//5: 'required' 初始化器 'init(coder:)' 必须由 'NSView' 的子类提供

我一开始输入,就会收到以下附加错误:

//1:使用未声明的类型'NSView'
//3: 'super' 成员不能在根类中被引用

如果我再次编译,之前的两个错误就会消失。

知道我做错了什么吗?就像我说的,你自己试试。也许这是一个错误。

【问题讨论】:

    标签: cocoa swift nsview


    【解决方案1】:

    除了忘记 override 关键字和忘记实现 initWithCoder 方法之外,听起来您并没有做错什么。

    请记住,在您键入时,代码处于不稳定状态。当你开始写一行代码时,直到你写完为止,它会充满错误。

    【讨论】:

    • 是否需要initWithCoder?当我开始输入时出现的错误在我完成输入后仍然存在(例如,将 NSView 更改为 NSViewController
    • 如果您查看基类中initWithCoder 的方法定义,您将看到关键字required。所以是的,这是必需的。错误将一直存在,直到编译器完成另一次传递,尝试按 command-b。当然,您实际上可能会产生更多错误,这也是可能的。
    猜你喜欢
    • 2011-10-16
    • 1970-01-01
    • 1970-01-01
    • 2011-02-27
    • 1970-01-01
    • 2021-06-24
    • 2021-01-21
    • 2021-01-29
    • 1970-01-01
    相关资源
    最近更新 更多