Swift:无主不能应用于非类类型 THETYPE -> () -> THETYPE

标签 swift

打开一个新的 Swift 项目并将其添加到 ViewController.swift:

private lazy var imagePicker = {
    [unowned self] in
    let retval = UIImagePickerController()
    let selfDelegate = self as! protocol<UIImagePickerControllerDelegate, UINavigationControllerDelegate>
    retval.delegate = selfDelegate
    retval.allowsEditing = true
    return retval
}()

(我们使用协议(protocol)一致性来重新构建 self,因为协议(protocol)一致性是在类扩展中定义的,以提高可读性。)

这会产生两个错误:

第一行:

'unowned' cannot be applied to non-class type 'ViewController -> () -> ViewController'

最后一行:

Cannot invoke value of type '() -> _' with argument list ()'

这两个错误对我来说毫无意义。它们是什么意思以及我该如何解决它们。

最佳答案

您必须指定变量的类型:

private lazy var imagePicker: UIImagePickerController = {

这将解决您的两个错误。

编译器在尝试推断类型时感到困惑。闭包对于它来说可能太复杂了,所有类型推断问题都以奇怪的错误消息结束。

关于Swift:无主不能应用于非类类型 THETYPE -> () -> THETYPE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34485080/

相关文章:

swift - 如何阻止 NSTextView 显示指定字体不支持的字符

swift - 在 AppDelegate 中设置初始 View Controller 时完全黑屏

ios - 处置(取消)可观察的。 SubscribeOn 和observeOn 不同的调度程序

ios - 在标签栏应用程序上推送新标签

ios - 如何在 swift-ios 文件中使用 asl.h

swift - 将数字分解为 2 的幂

swift - UIBezierPath 弧边缘的物理

ios - CollectionView循环显示项目分页

Swift MapKit 多边形叠加

ios - 如何更改以编程方式为 UIButton 添加的约束