Swift 2.0 : infer closure type error

2.9k views Asked by At

I get error

Unable to infer closure type in the current context

In code which was working in Swift 1.2

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

Whole View Controller where I get this error

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);
    }
}
1

There are 1 answers

0
MLQ On BEST ANSWER

I found two ways to get rid of this error.

First, explicitly annotate the property with its type. I find this very strange because Swift is supposed to just infer this from the initialization.

lazy var embeddedViewController: CustomViewController = CustomViewController()

The second is just to remove the lazy keyword.

var embeddedViewController = CustomViewController()

So I guess this is an error currently plaguing lazy properties in Swift 2.0?