【问题标题】:Swift 2.0 : infer closure type errorSwift 2.0:推断闭包类型错误
【发布时间】:2015-08-24 02:50:54
【问题描述】:

我得到错误

无法在当前上下文中推断闭包类型

在 Swift 1.2 中运行的代码中

private lazy var _messagesVC =  { return MessagesViewController(nibName:"MessagesViewController",bundle:nil)}()

我得到这个错误的整个视图控制器

import UIKit
class FriendsViewController: UIViewController {

@IBOutlet weak var containerView: UIView!
@IBOutlet weak var segmentContainerView: UIView!
private lazy var _connectionVC  =  { return FriendsConnectionViewController(nibName:"FriendsConnectionViewController",bundle:nil)}()
private lazy var _messagesVC =  { return MessagesViewController(nibName:"MessagesViewController",bundle:nil)}()


override func viewDidLoad() {
    super.viewDidLoad()
    self.selectedControllerFrom(index: 0)
     // Do any additional setup after loading the view.
}

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)

}

func selectedControllerFrom(index index:UInt)
{
    var vc:UIViewController?
    switch index{
    case 0: vc = _connectionVC
    case 1: vc = _messagesVC
    default : vc = nil
    }
    if vc != nil{
         self.showViewController(vc!,containerView: containerView);
    }
}

【问题讨论】:

  • 你能展示整个上下文吗? _mapVC 可能是某个类的属性,如果我把它放在一个简单的类定义中(并欺骗你的 MapViewController),你的声明似乎在 Playground 中有效......
  • 添加了其他控制器但同样的错误...
  • 您是否尝试过添加类型注释? private lazy var _messagesVC: MessagesViewController = { .. }()
  • 是的,它的帮助请创建答案,我会关闭这个问题

标签: swift types init lazy-initialization


【解决方案1】:

我找到了两种方法来消除这个错误。

首先,用它的类型显式地注释属性。我觉得这很奇怪,因为 Swift 应该只是从初始化中推断出来。

lazy var embeddedViewController: CustomViewController = CustomViewController()

第二个就是去掉lazy关键字。

var embeddedViewController = CustomViewController()

所以我猜这是目前困扰 Swift 2.0 中惰性属性的错误?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-21
    • 2020-04-29
    • 1970-01-01
    相关资源
    最近更新 更多