无法使用*类型的对象调用$ function

时间:2015-11-14 15:40:05

标签: swift

我遇到类似错误似乎不正确的问题。以下代码生成错误: "不能使用类型的参数列表调用baz(f:(A) - >(),g:(String) - >())"如上所示,"不正确" type是baz的确切类型,被称为。

注意:我退出了成功'并且'失败'为了类型清晰,但使用函数作为闭包时会发生同样的事情。

class Foo<A> {
  ..
  func baz(f: (A) -> (), g: (String) -> ()) {
    .. do some stuff 
  }
  func bar<A, B>(f: (A -> B)) -> Foo<B> {
    func succeed(a: A) -> () {
      .. do some stuff
    }
    func fail(s:String) -> () {
      .. do some stuff
    }
    baz(f: succeed, g: fail)
    .. do some stuff
  }
}

2 个答案:

答案 0 :(得分:1)

为函数A声明的泛型参数bar会覆盖为类Foo声明的泛型类型,您需要将其删除:

class Foo<A> {
    func baz(f: (A) -> (), g: (String) -> ()) {}

    func bar<B>(f: (A -> B)) -> Foo<B> {
        func succeed(a: A) -> () {}

        func fail(s:String) -> () {}

        baz(succeed, g: fail)

        return Foo<B>()
    }
}

答案 1 :(得分:0)

这是关于A协议的内容。我更改并创建了新的F,因此它可以编译,并且可以在我的操场上运行:

protocol F {
}

class Foo<A> {

    func baz(f: (F) -> (), g: (String) -> ()) {
    }
    func bar<A, B>(f: (A -> B)) -> Foo<B> {
        func succeed(a:F) -> () {}
        func fail(s:String) -> () {}
        baz(succeed, g:fail)
        return Foo<B>()
    }
}