web-dev-qa-db-ja.com

Swift:型はプロトコルを実装し、指定されたクラスのサブクラスである必要があります

Objective-Cでは、タイプを特定のクラスであり、プロトコルを実装するものとして定義できます。

- (UIView <Protocol> *)someMethod;

これは、someMethodによって返される値が特定のプロトコルUIViewを実装するProtocolであったことを示します。 Swiftで同様のことを強制する方法はありますか?

15
Kamchatka

あなたはこのようにそれを行うことができます:

protocol SomeProtocol {
  func someMethodInSomeProtocol()
}

class SomeType { }

class SomeOtherType: SomeType, SomeProtocol {
  func someMethodInSomeProtocol() { }
}

class SomeOtherOtherType: SomeType, SomeProtocol {
  func someMethodInSomeProtocol() { }
}

func someMethod<T: SomeType where T: SomeProtocol>(condition: Bool) -> T {
  var someVar : T
  if (condition) {
    someVar = SomeOtherType() as T
  }
  else {
    someVar = SomeOtherOtherType() as T
  }

  someVar.someMethodInSomeProtocol()
  return someVar as T
}

これは、タイプ「SomeType」およびプロトコル「SomeProtocol」のオブジェクトを返し、それらの条件に準拠するオブジェクトを返す関数を定義します。

10
ColGraff