2014-10-23 12 views
8

spróbował wykorzystać:W Swift, jak sprawdzić, czy obiekt (AnyObject) jest ciągiem?

obj.isKindOfClass(String) 

ale mówi typu „String” nie jest zgodny z protokołem „AnyObject”

Więc jak można powiedzieć, jeśli obiekt jest łańcuchem czy nie?

Kontekstem tego pytania jest metoda UIActivity, prepareWithActivityItems, w której muszę zapisać element działania, ale jeśli istnieje wiele elementów aktywności, jak się dowiedzieć, który jest który?

Odpowiedz

19

Sprawdź:

obj is String // true or false 

Konwersja:

obj as? String // nil if failed to convert 

Opcjonalnie oprawa:

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

To było łatwe. W samej dokumentacji. Ups. https://developer.apple.com/library/ios/documentation/swift/conceptual/swift_programming_language/TypeCasting.html#//apple_ref/doc/uid/TP40014097-CH22-XID_513 – shim

4

mam zamiar zejść na kawałku stycznej więc zrozumieć, co jest dziać się.

Struny nie są obiektami w szybkim tempie. !!!

Kinda. ???

Ze względu na sposób bezpłatny pomostowego działa ... jeśli importować Objective-C czas pracy to można traktować ciągi jako obiekt ... to sprawdzić:

Ten kod nie będzie kompilować na wszystkich:

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

// import Foundation 

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

Ale gdybym odkomentowaniu ramy Foundation, to kompiluje perfekcyjnie, ponieważ jesteśmy aktywacji pomostowych pomiędzy ciągiem i NSString:

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

import Foundation 

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

A jeśli chcesz sprawdzić, czy foo jest ciągiem ... można to zrobić:

import Foundation 

var foo: AnyObject = "hello" 

foo.isKindOfClass(NSString) // this returns true 

So ... ciąg nie jest obiektem, ale jeśli traktować je jako jeden zostanie ona przekształcona w NSString a teraz jest to obiekt. Ale nie można sprawdzić, czy obiekt należy do klasy String, ponieważ nie ma czegoś takiego jak obiekt String. Musisz użyć NSString.

Oczywiście nadal powinieneś robić to, co Scott powiedział w swojej odpowiedzi, używając słów kluczowych is lub as?.

+0

Dzięki za szczegółową odpowiedź – shim

Powiązane problemy