小编Ken*_*bur的帖子

Swift 2.0:如果参数化类继承自Equatable类,则它不会调用正确的==函数

当参数化类继承自另一个符合的类时Equatable,==调用超类==.任何人都可以解释为什么会发生这种情况和/或我在这里做错了什么?我相信一个最好的例子说明了我的问题:

public class Foo: Equatable {}
public func ==(lhs: Foo, rhs: Foo) -> Bool { return false }

//Parametrized
public class Bar<T: Equatable>: Foo {
  public var bar: T?
  public init(barIn: T?) {
    self.bar = barIn
  }
}
public func ==<T>(lhs: Bar<T>, rhs: Bar<T>) -> Bool { return lhs.bar == rhs.bar }

//Non parametrized
public class Baz: Foo {
  public var baz: Int?
  public init(bazIn: Int?) {
    self.baz = bazIn
  }
}
public func …
Run Code Online (Sandbox Code Playgroud)

overloading class operator-overloading language-lawyer swift

7
推荐指数
1
解决办法
383
查看次数

Swift:传入抛出异常的函数

我有以下玩具示例

func identity<T>(a : T) -> T{
  return a
}

func applyIdentity<T>(f : T->T, t:T) -> T{
  return f(t)
}

applyIdentity(identity, t:1)
Run Code Online (Sandbox Code Playgroud)

这可以顺利进行。但是,一旦我尝试在身份中抛出异常,如下所示:

enum MyError: ErrorType{
  case MyErrorFoo
};

func identity<T>(a : T) throws -> T{
  if (true) {
    return a
  } else {
    throw MyError.MyErrorFoo
  }
}
...
Run Code Online (Sandbox Code Playgroud)

类型检查器在applyIdentity(identity, t:1)呼叫中抱怨消息:

Argument for generic parameter 'T' could not be inferred
Run Code Online (Sandbox Code Playgroud)

知道为什么会发生这种情况吗?

error-handling swift

5
推荐指数
1
解决办法
1977
查看次数