2015-01-23 4 views
1

У меня есть массив [AnyObject] и хотел бы его отличить как [PFObject] и [String]. Каков правильный способ сделать это? Мне сказали, что as String не был идеальным способом угасить от AnyObject.Downcast [AnyObject] to [String] и [PFObject]

В настоящее время с помощью этого кода, чтобы преобразовать объект в массиве в виде строки:

restaurantNames = finalRestaurantArray.map { $0.objectForKey("Name") as String } 

массива выглядит следующим образом:

[<Restaurant: 0x7feb9252cfc0, objectId: LA74J92QDA, localId: (null)> { 
    Name = "Restaurant 1";   
    City = "New York"; 
    Closed = 1; 
    Country = "United States"; 
    FoodType = Japanese; 
}, <Restaurant: 0x7feb926afa00, objectId: 0aKFrpKN46, localId: (null)> { 
    Name = "Restaurant 2";   
    City = "San Francisco"; 
    Closed = 1; 
    Country = "United States"; 
    FoodType = Italian; 
}] 
+0

Что вы делаете правильно, поэтому я не вижу вопроса. Разве это не работает? Если это так, пожалуйста, объясните, что происходит. – matt

+0

Проблема в том, что вам не нравится использование AnyObject? Затем сначала переведите весь массив в '[PFObject]' (как вы уже сказали). – matt

+0

@matt Я спрашивал, потому что мой другой вопрос получил ответ, который предположил, что downcasting с 'as String' был плохой идеей: http://stackoverflow.com/questions/28099082 – Onichan

ответ

3

Вы можете использовать что-то вроде этого:

let restaurantNames = finalRestaurantArray.map { 
    $0["Name"] as? String ?? "" 
} 

?? ставит значение по умолчанию, если сбой вниз.

+0

Я спрашивал, потому что мой другой вопрос получил ответ, который предположил, что downcasting с 'as String' был плохой идеей: http://stackoverflow.com/questions/28099082 – Onichan

+0

@Emma вы можете явно объявить тип для * restaurantNames *. В этом случае компилятор будет знать, как его использовать. –

Смежные вопросы