Ich versuche, eine Funktion zu schreiben, die ein Objekt und einen Typ als Argumente akzeptiert und einen booleschen Wert zurückgibt, der angibt, ob das Objekt den angegebenen Typ hat oder nicht. Es scheint keinen Type-Typ zu geben, also weiß ich nicht, wie ich das machen soll. Das Beste, was ich habe in der Lage zu tun istGenerische Swift-Funktion zum Testen auf Objekttyp
func objectIsType<T>(object: AnyObject, someObjectOfType: T) -> Bool {
return object is T
}
So kann ich objectIsType(x, 5)
tun, zu testen, ob x
ein Int
oder objectIsType(x, "hi")
zu sehen, ob es sich um eine Zeichenfolge, aber ich möchte in der Lage sein objectIsType(x, Int)
anrufen um zu sehen, ob x
ein Int
und objectIsType(x, String)
ist, um zu sehen, ob es ein String
ist. Ist so etwas möglich?
Edit:
verbesserte Fluggeschwindigkeits-Geschwindigkeit meiner Funktion und machte einen großen Punkt, um es genau zu tun, was is
bereits der Fall ist. Die neue Funktion ist dies:
func objectIsType<T>(object: Any, someObjectOfType: T.Type) -> Bool {
return object is T
}
Was ich versuche zu validieren ist zu tun, dass die Werte eines [String: Any]
Wörterbuch des Typs sind, die ich erwarte. Zum Beispiel:
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()
}
}
Aber ich bekomme den Fehler, <>protocol.Type is not convertible to T.type
. Ich habe mir die Metatype-Dokumentation angeschaut, bin aber immer noch etwas verwirrt.
Die Verwendung von 'AnyObject' ist hier gefährlich. 'x' wird von einer' Int' in eine 'NSNumber' umgewandelt, also' objectsIsType (5 als Int, 5 als Double) == true' –
Vielleicht solltest du deine Änderung als eine andere Frage veröffentlichen. – rintaro