作为lambda的Swift类成员

时间:2015-03-26 02:50:11

标签: swift

我有一个类,我希望类的成员变量是lambda函数类型。这个lambda将在该类的一个函数中设置。

class MyCollectionViewController: UIViewController, UICollectionViewDelegateFlowLayout  {

var onCollectionViewItemSelected:{(i:Int)->Void}


func setLambda(lambda:(i:Int)->Void) {
   self.onCollectionViewItemSelected = lambda
}

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
    self.onCollectionViewItemSelected(indexPath.row)
}

}

这会给编译器错误。我该怎么做?

2 个答案:

答案 0 :(得分:0)

这是正确的语法

var onCollectionViewItemSelected:(i:Int)->Void = {(i:Int) in}

答案 1 :(得分:0)

没有理由定义setlambda函数,因为您可以使用赋值给属性或计算属性。而且,就目前情况而言,您似乎并没有初始化“回调”'这表明它的类型最好是可选的 - 或者不是,具有所需的初始值

class MyCollectionViewController: UIViewController, UICollectionViewDelegateFlowLayout  {

  var itemSelectedCallback = { (i:Int) -> Void in return } // type inferred

  func collectionView(collectionView: UICollectionView, 
      didSelectItemAtIndexPath indexPath: NSIndexPath) {
    itemSelectedCallback (indexPath.row)
  }
}