У меня проблема в swift, где я хочу проверить соответствие протокола в классе func, а затем использовать некоторое статическое свойство, когда проверка завершится успешно. Вот код площад:Swift cast self in class func
import UIKit
@objc protocol SearchableObject {
static var sortDescriptors: [NSSortDescriptor] { get }
}
class Test: NSObject {
}
extension Test {
class func loadData() {
if self is SearchableObject {
println(valueForKey("sortDescriptors"))
}
else {
println("not searchable")
}
}
}
class SearchableTest: Test, SearchableObject {
class var sortDescriptors: [NSSortDescriptor] {
return [NSSortDescriptor(key: "property", ascending: true)]
}
}
Test.loadData() // prints "not searchable"
SearchableTest.loadData() // prints "Optional((\n "(property, ascending, compare:)"\n))"
проблема я могу проверить для протокола соответствия, но я не могу бросить себя, поэтому я использую valueForKey().
(self as SearchableObject).sortDescriptors
^'SearchableObject' does not have a member named 'sortDescriptors'
ставит себя на экземпляр соответствующего SearchableObject сделать статический вар недоступным. Поскольку мне не нравится подход valueForKey(), я хочу спросить, есть ли лучший способ достичь этого?
Заранее спасибо :)
хорошо прохладно. все еще немного плохо выглядящий, но не нужно использовать кавычки и избавиться от кастинга (когда я использую request.sortDescriptors = valueForKey («sortDescriptors») vs. (self as AnyClass). sortDescriptors) как определенный плюс для этого ответа :) спасибо – warly
не может быть помечен \ @objc, потому что тип параметра 1 не может быть представлен в объективе-C. метод не может быть помечен \ @objc, потому что тип параметра 2 не может быть представлен в объективе-C. метод не может быть помечен \ @objc, поскольку тип параметра 4 не может быть представлен в объективе-C. Свифт знает, как тролль .. – bubakazouba