2016-11-18 61 views
0

我正在嘗試使用Firebase進行登錄/註冊屏幕。我創建了一個用於將數據發送到Firebase的快速類,並且我稱之爲「DataService」類。我也登錄並註冊課程。在「DataService」類中,我不能創建多個函數,我得到的錯誤類似於類型DataService的值沒有成員「註冊」當我嘗試創建註冊函數時。但其他功能正常工作。我可以在這個類中只有一個函數(DataService)。Swift 3,無法在viewcontroller中創建多個函數?

DataService類

import Foundation 
    import Firebase 
    import FirebaseAuth 
    import FirebaseStorage 

let rootRef = FIRDatabase.database().reference() 

class DataService { 

static let dataService = DataService() 

private var _BASE_REF = rootRef 
private var _PHOTO_REF = rootRef.child("photos") 

var BASE_REF: FIRDatabaseReference { 
    return _BASE_REF 
} 

var PHOTO_REF: FIRDatabaseReference { 
    return _PHOTO_REF 
} 

var storageRef: FIRStorageReference{ 
    return FIRStorage.storage().reference() 
} 

var fileUrl: String! 



// Share Photo Data 

func shareNewPhoto(user: FIRUser, caption: String, data: NSData) { 
let filePath = "\(user.uid)/\  (Int(NSDate.timeIntervalSinceReferenceDate))" 
let metaData = FIRStorageMetadata() 
    metaData.contentType = "image/jpg" 
    storageRef.child(filePath).put(data as Data, metadata: metaData) { (metadata, error) in 
     if let error = error { 
      print("Error uploading: /\(error.localizedDescription)") 

     } 

     // Create a Url for data (Story Photo) 

     self.fileUrl = metadata!.downloadURLs![0].absoluteString 
     if let user = FIRAuth.auth()?.currentUser { 
      let idPhotoRoom = self.BASE_REF.child("PhotoRooms").childByAutoId() 
      idPhotoRoom.setValue(["caption": caption, "StoryPhotoUrlFromStorage": self.storageRef.child(metadata!.path!).description, "fileUrl": self.fileUrl]) 
     } 
    } 


    // Story Photo (upload and dowload from server) 

func fetchDataFromServer(callback:@escaping (StoryPhoto) ->()) { 
    DataService.dataService._PHOTO_REF.observe(.childAdded, with: { (snapshot) in 
     let photo = StoryPhoto(key: snapshot.key, snapshot: snapshot.value as! Dictionary<String, AnyObject>) 
      callback(photo) 

     }) 



     // Sign Up 

func signUp(username: String, email: String, password: String, data: NSData) { 
    FIRAuth.auth()?.createUser(withEmail: email, password: password, completion: { (user, error) in 
     if let error = error { 
      print(error.localizedDescription) 
      return 
     } 

     let changeRequest = user?.profileChangeRequest() 
     changeRequest?.displayName = username 
     changeRequest?.commitChanges(completion: { (error) in 
      if let error = error{ 
       print(error.localizedDescription) 
       return 
      } 
     }) 

     let filePath = "profileimage/\(user!.uid)" 
     let metaData = FIRStorageMetadata() 
     metaData.contentType = "image/jpeg" 

     self.storageRef.child(filePath).put(data as Data, metadata: metaData, completion: { (metadata, error) in 
      if let error = error { 
       print("\(error.localizedDescription)") 
       return 
      } 
      self .fileUrl = metadata?.downloadURLs![0].absoluteString 
      let changeRequestPhoto = user!.profileChangeRequest() 
      changeRequestPhoto.photoURL = NSURL(string: self.fileUrl) as URL? 
      changeRequestPhoto.commitChanges(completion: { (error) in 
       if let error = error { 
        print(error.localizedDescription) 
        return 
       }else{ 
        print("profile uptaded") 
       } 
      }) 

      let appDelegate: AppDelegate = UIApplication.shared.delegate as! AppDelegate 
      appDelegate.Login() 

     }) 


    }) 
} 

} 


} 

} 

會員註冊類。在這裏,我收到錯誤,如DataService類型的值沒有成員「註冊」。

// Register Button 

@IBAction func RegisterDidTapped(_ sender: AnyObject) { 
    guard let email = emailTextField.text, let password = passwordTextField.text, let username = usernameTextField.text else { 
     return 
    } 

    var data = NSData() 
    data = UIImageJPEGRepresentation(profileImage.image!, 0.1)! as NSData 

    //Signin up 


    Here i am getting Error: (Value of type DataService has no member "sign Up") 

    DataService.dataService.signUp(username: username, email: email, password: password, data: data) 


} 

} 
+0

你是怎麼稱呼'signUp'方法的? –

+1

不相關,但支持使用私有隻讀變量獲取常量的公共變量在Swift中完全是無稽之談。只需用'let'聲明*變量*爲例:'let BASE_REF:FIRDatabaseReference = rootRef'並且切掉私有變量 – vadian

+0

如果那個是一個Singleton,可能需要添加一個私有的init:private init() –

回答

2

檢查正確開啓和關閉{}。看起來像你的signUp函數在其他函數裏面。

+0

感謝您的回答,現在我檢查並刪除了所有內容,然後再次撰寫,現在正在工作。 –

相關問題