Я пытаюсь реализовать функцию, которая условно называется условным, если дополнительный объект, возвращаемый функцией, реализует конкретный протокол. Я изо всех сил с синтаксисом ... он говорит мне:Unwrap необязательно как условный объект, который реализует интерфейс
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'? Это будет работать, только если 'Foo' не использует' Self' и не имеет связанных типов. – zneak
@zneak Предположим, что это не так. – Tibrogargan
Не так ли? Не имеет связанных типов и не использует Self? – zneak