1

我一直在关注 youtube 上的教程并在 xcode 中编写类似 twitter 的应用程序并不断返回此错误,该教程使用的是早期版本的 swift。我该如何克服这个问题?

class HandleViewController: UIViewController {
    @IBOutlet weak var fullName: UITextField!
    @IBOutlet weak var handle: UITextField!
    @IBOutlet weak var startTweeting: UIBarButtonItem!
    @IBOutlet weak var errorMessage: UILabel!

    var user = AnyObject()
    var rootRef = FIRDatabase.database().reference()

    override func viewDidLoad() {
        super.viewDidLoad()

        self.user = FIRAuth.auth()?.currentUser
    }
4

1 回答 1

1

你得到这个错误是因为AnyObject在 Swift 中是一个Protocol,而不是一个类、结构或枚举。协议是类的蓝图,您可以创建符合它的类,但协议本身永远无法实例化。

至于如何修复它:看起来您正在遵循的教程使用与教程此处相同的代码。user它为in分配一个值viewDidLoad,然后将其视为可选项。所以初始值只是一个永远不会被使用的占位符。

您可以将声明更改为可选的,给它一个类型但没有值:

var user: AnyObject?

AnyObject在 Swift中一直是 a ,所以永远不可能有它的实例。那么为什么它在教程中使用的以前版本的 Swift 中可以工作呢?好吧,您的版本中似乎有错字。在教程中它看起来像这样:Protocol

var user = AnyObject?()

后面的问号AnyObject?使它成为Optionaltype AnyObject。在 Swift 3.0 之前的版本中,Optional有一个init()方法可以创建一个空实例。AnyObject?()Optional的 type的简写也是如此AnyObject,value 设置为 nil。在 Swift 3 中,多余的初始化器被删除了,所以速记不再起作用。但是仅仅将变量声明为可选项具有相同的效果。

于 2017-05-03T22:01:00.073 回答