関数によって返されたオプションのオブジェクトが特定のプロトコルを実装する場合、条件付きで呼び出される関数を実装しようとしています。インタフェースを実装する条件オブジェクトとしてオプションでアンブラック
Braced block of statements is an unused closure
と
Expected { after if condition
例:
class SomeType {
}
class Something {
func doSomething()
}
protocol Foo {
func foo() -> SomeType
}
class Bar {
var whatever : SomeThing
}
extension Bar {
var handler : SomeThing? {
return whatever
}
}
class FooBar {
func doSomething(bar : Bar) {
// Assuming that bar's handler is set and implements Foo then use foo...
let foo = bar.handler as SomeThing : Foo {
...
foo.doSomething()
...
foo.foo()
}
}
}
を私はこれを行うことができます:私はそれが私に言っています...構文に苦しんだ
if let foo = bar.handler! as? Something {
if (foo is Foo) {
foo.doSomething()
(foo as Foo).foo()
}
}
または:
if let fubar = bar.handler! as? Something, let foo = fubar as? Foo {
fubar.doSomething()
foo.foo()
}
しかし、私は、実行時にすべてを決定する(それはあなたがやろうとしているまさにこのコードから非常に不明確だが、あなたは完全に動的にこれを実行しようとしている場合はきれいな方法
'bar.handler as?フー '? 'Foo'が' Self'を使わず、関連する型を持っていない場合にのみ動作します。 – zneak
@zneakそうではないと仮定します。 – Tibrogargan
何もありませんか?関連付けられた型を持たず、Selfを使用しませんか? – zneak