2016-11-13 21 views
0

Firebaseでサインイン/サインアップ画面を作成しようとしています。 Firebaseにデータを送信するための素早いクラスを作成しました。クラス「DataService」を呼び出しました。私はサインインしてクラスにサインアップしています。 "DataService"クラスでは、複数の関数を作成できません。DataService型の値には、「サインアップ」というメンバーがありません。サインアップ関数を作成しようとしています。しかし、他の関数は正常に動作します。私はこのクラス(DataService)に1つだけの関数を持つことができます。Xcode 8、Swift 3. DataServiceタイプの値にメンバーがありません。「登録」

の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

あなたの問題は、他の機能の中に機能を入れていることです。この場合はしないでください。他のコードから呼び出す必要がある関数は、他の関数の内部に埋め込まれていないクラスのトップレベル関数でなければなりません。

また、関係のない適切な標準命名規則を使用してください。メソッド名と変数名は、小文字で始まる必要があります。クラス名は大文字で始まります。

+0

しかし、私はどのようにこれらの機能を他の機能から外すべきですか? –

+0

'ShareNewPhoto'機能と同じレベルにします。 – rmaddy

+0

私はまだ同じエラーが発生していますが、動作していません。私はこのコードで何が間違っているのか分かりません。 –

関連する問題