2014-10-23 14 views
8

provato ad utilizzare:In Swift, come si controlla se un oggetto (AnyObject) è una stringa?

obj.isKindOfClass(String) 

ma dice tipo 'String' non è conforme al protocollo 'ANYOBJECT'

Così come si può dire se un oggetto è una stringa o no?

Il contesto di questa domanda è il metodo UIActivity, prepareWithActivityItems, in cui ho bisogno di salvare l'elemento dell'attività, ma se ci sono più elementi di attività, come si capisce quale è quale?

risposta

19

Check:

obj is String // true or false 

Converti:

obj as? String // nil if failed to convert 

opzionale vincolante:

if let str = obj as? String { 
    // success 
} else { 
    // fail 
} 
+0

È stato facile. Giusto anche nella documentazione. Ops. https://developer.apple.com/library/ios/documentation/swift/conceptual/swift_programming_language/TypeCasting.html#//apple_ref/doc/uid/TP40014097-CH22-XID_513 – shim

4

ho intenzione di partire per un po 'di una tangente in modo da capire che cosa è andando avanti.

Le stringhe non sono oggetti in rapido. !!!

Kinda. ???

A causa del modo di ponte numero verde funziona ... se si importa il runtime Objective-C allora si può trattare le stringhe come un oggetto ... check this out:

Questo codice non verrà compilato a tutti:

// Playground - noun: a place where people can play 

// import Foundation 

var foo: AnyObject = "hello" 
        ^Type 'String' does not conform to protocol 'AnyObject' 

Ma se io rimuovere il commento il quadro Fondazione, allora compila perfettamente bene, perché stiamo attivando ponte fra corde e NSString:

// Playground - noun: a place where people can play 

import Foundation 

var foo: AnyObject = "hello" // We're all good here! 

E se si vuole verificare se foo è una stringa ... si può fare questo:

import Foundation 

var foo: AnyObject = "hello" 

foo.isKindOfClass(NSString) // this returns true 

Quindi ... stringa non è un oggetto, ma se si trattano come uno sarà convertito in un NSString e ora è un oggetto. Ma non è possibile verificare se un oggetto appartiene alla classe String, perché non esiste qualcosa come un oggetto String. Devi usare NSString.

Naturalmente, si dovrebbe ancora fare ciò che Scott ha detto nella sua risposta, utilizzando le parole chiave is o as?.

+0

Grazie per la risposta dettagliata – shim

Problemi correlati