2015-01-15 103 views
3

我無法在swift中從函數返回對象的自定義數組。我總是收到[(custon object)] is not convertable to '()'錯誤消息。我認爲我違反了一些迅速的協議。以下是我的代碼。請讓我知道我違反了。如何在swift中返回函數中的對象的自定義數組

import Foundation 

class DataSet { 
    var settings:Settings! 
    var service:PostService! 
    var currentBrand:Brand! 

    init(){ 
     self.settings = Settings() 
     self.service = PostService() 
    } 

    func loadComments(id:Int) -> [CommentsList]{ 
     service.apiCallToGet(settings.getComments(id), { 
      (response) in 
      var commentsList = [CommentsList]() 
      if let data = response["data"] as? NSDictionary { 
       if let comments = data["comments"] as? NSArray{ 
        for item in comments { 
         if let comment = item as? NSDictionary{ 
          var rating = comment["rating"]! as Int 
          var name = comment["device"]!["username"]! as NSString 
          var text = comment["text"]! as NSString 
          var Obj_comment = CommentsList(rating: rating, name: name, text: text) 
          commentsList.append(Obj_comment) 
         } 
        } 
       } 
      } 

      return commentsList //This line shows error as : "[(CommentsList)] is not convertable to '()'" 
     }) 
    } 
} 

回答

4

你return語句是你的Web服務,它不返回任何()完成塊內 - 這是什麼錯誤意味着。

異步Web調用包裝的方法無法返回值,因爲您必須阻止,直到Web通話完成。你loadComments方法應該完成塊參數,這需要[CommentsList]作爲參數:

func loadComments(id: Int, completion:(comments:[CommentsList])->Void) { 
    // existing code 

然後,

completion(comments:commentsList) 
+0

謝謝jrturton。你救了我。非常感謝。 – Nuibb

0

問題更換您return語句是這個函數的類型簽名:

func loadComments(id:Int) -> [CommentsList] 

您不返回任何東西。你調用這個函數:

service.apiCallToGet(...) 

但是,斯威夫特並不在你的錯誤返回任何隱含因此()(這意味着void)。該錯誤給出的行是有點誤導...

相關問題