Próbuję napisać funkcję, która pobiera obiekt i typ jako argumenty i zwraca wartość logiczną wskazującą, czy obiekt jest danego typu. Wygląda na to, że nie ma typu, więc nie jestem pewien, jak to zrobić. Najlepszą udało mi się zrobić toOgólna funkcja Swift do testowania typu obiektu
func objectIsType<T>(object: AnyObject, someObjectOfType: T) -> Bool {
return object is T
}
Więc mogę zrobić objectIsType(x, 5)
, aby sprawdzić, czy x
jest Int
lub objectIsType(x, "hi")
, aby zobaczyć, czy jest to ciąg znaków, ale chciałbym, aby móc nazwać objectIsType(x, Int)
aby sprawdzić, czy x
jest Int
i objectIsType(x, String)
, aby sprawdzić, czy jest to String
. Czy coś takiego jest możliwe?
Edit:
Airspeed Velocity poprawił moją funkcję i zrobiła wielki punkt o nim robi dokładnie to, co is
już robi. Nowa funkcja jest taka:
func objectIsType<T>(object: Any, someObjectOfType: T.Type) -> Bool {
return object is T
}
Co staram się robić to, aby potwierdzić, że wartości słownika [String: Any]
są typu, że ja się spodziewać. Na przykład:
let validator: [String: Any.Type] = [
"gimme an int": Int.self,
"this better be a string": String.self
]
let validatee: [String: Any] = [
"gimme an int": 3,
"this better be a string": "it is!"
]
for (key, type) in validator {
if !objectIsType(validatee[key], type) {
selfDestruct()
}
}
Ale pojawia się błąd, <>protocol.Type is not convertible to T.type
. Przyjrzałem się dokumentacji Metatype, ale wciąż jestem nieco zdezorientowany.
Używanie "AnyObject" jest tutaj niebezpieczne. 'x' zostanie przekonwertowany z' Int' na 'NSNumber', więc' objectIsType (5 jako Int, 5 jako Double) == true' –
Może, powinieneś opublikować swoją edycję jako kolejne pytanie. – rintaro