2016-09-15 8 views
1

swift 2를 사용하여 완벽하게 작동하는 프로젝트를 만들었습니다. 그러면 xcode가 업데이트되어 코드가 Swift 3으로 변환되었습니다. 이제 스냅 샷을 호출 할 때마다이 오류가 발생합니다. Firebase를 백엔드로 사용하고 있습니다. 이것은 내 코드입니다.swift 3 유형 'Any'error

import Foundation 
import Firebase 
import FirebaseDatabase 
import FirebaseAuth 


struct User { 

var username: String! 
var email: String! 
var photoUrl: String! 
var country: String! 
var ref: FIRDatabaseReference? 
var key: String! 


init(snapshot: FIRDataSnapshot){ 

    key = snapshot.key 
    username = snapshot.value!["username"] as! String 
    email = snapshot.value!["email"] as! String 
    photoUrl = snapshot.value!["photoUrl"] as! String 
    country = snapshot.value!["country"] as! String 
    ref = snapshot.ref 

} 




} 

'Any'유형에는 아래 첨자 멤버가 없습니다. 이 오류는 snapshot.value가있는 행에 있습니다. 누구든지이 문제를 해결하는 방법에 대한 아이디어가 있습니까?

답변

4

같은 대해 무엇 :

let values = snapshot.value as! Dictionary<String,String> 
username = values["username"] 
... 
+0

이 오류를 해결 한 것 같다! 나는 새로운 프로젝트를 시작해야했다. 왜냐하면 다른 프로젝트는 정말 엉망이 되었기 때문에 병이 나면 그 점을 다시 알게된다. 고맙습니다. – mavericklab

+0

이 경우에는 대답이지만 값은 항상 String이 아닙니다. NSNumber 또는 NSDictionary 일 수 있습니다. –

1

엑스 코드 8 베타 전에 6 snapshot.values ​​유형이었다 [문자열 : AnyObject]. 그냥이

guard snapshot.exists() else { return } 
let value = snapshot.value as! [String:AnyObject] 
username = value["username"] as! String 
0

snapshot.value는 사전, 배열, 문자열 등도 할 수 있습니다 캐스트, 스위프트 3에 사전을 표현하는 방법에 변화가 있었다. 그것은 [String:AnyObject]에서 [String:Any]로 갔다.

이 작업을 수행하는 올바른 방법으로 안전하게 같은 모든 값 랩을 해제 할 수 있는지 확인하는 것입니다 :

// swift 3  
if let userDict = snapshot.value as? [String:Any] { 
    username = userDict["username"] as? String 
}