2017-01-29 1 views
0

Я стараюсь, чтобы преобразовать код для быстрой 3 двутавровой потратили часы на следующей ошибки:переменная используется в пределах своей первоначальной стоимости Swift 3

Type 'Any' has no subscript members

Здесь был мой исходный код:

let data: AnyObject = user.object(forKey: "profilePicture")![0] 

Я посмотрел на ответы here, но я все еще застрял. (Я программирование в качестве хобби, я не про: /)

Я стараюсь, что:

let object = object.object(forKey: "profilePicture") as? NSDictionary 
    let data: AnyObject = object![0] as AnyObject 

Но теперь я получаю эту ошибку:

Variable used within its own initial value

+1

вместо 'let object = object.object (forKey:" profilePicture ")' use 'let object = user.object (forKey:" profilePicture ")' – Eimantas

ответ

1

Второго выпуск : Используйте всегда имя переменной в качестве имени метода, в основном используйте более описательные имена, чем object в любом случае.

Первая проблема. Сообщите компилятору тип значения для profilePicture, по-видимому, массива.

if let profilePictures = user["profilePicture"] as? [[String:Any]], !profilePictures.isEmpty { 
    let data = profilePictures[0] 
} 

Однако массив может содержать Data объекты, если так использовать

if let profilePictures = user["profilePicture"] as? [Data], !profilePictures.isEmpty { 
    let data = profilePictures[0] 
} 

Или - что означает ключ - значение для profilePicture является единым объектом, который знает (но вы ...)

И, наконец, как обычно, не используйте NSArray/NSDictionary в Swift.

+0

Кроме того, не просто используйте 'profilePictures [0]' , Вместо этого используйте '.first' и разверните его. –

+0

Спасибо, я предпочитаю также дополнительные привязки. – vadian

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