2016-04-25 13 views
3

Ich versuche Block in Swift erstellen.Erstellen von Block in Swift funktioniert nicht

Ich habe Klasse erstellt und erklärt Block wie diese

typealias JSONParserBlock = (dict:NSDictionary?,error:NSError?) -> Void

Variablendeklaration:

var block: JSONParserBlock!

und Funktion:

func Getdata(WebService: String, RequsetedParameter Param:NSDictionary?, BLOCK: JSONParserBlock!) -> Void 
{} 

Aber mein Problem ist, wenn ich ruf dies an Funktion von einer anderen Klasse, ist diese Funktion nicht

Funktionsaufruf wie folgt auszuführen ist:

var objJsonParser:JsonParser? 

objJsonParser?.Getdata(str as String, RequsetedParameter:Dictionary, BLOCK: 
    { (dict, error) in 
     print("success") 
}) 

Benutzerdefinierte Klassencode

import UIKit 

class JsonParser: NSObject,NSURLConnectionDelegate 
{ 
    typealias JSONParserBlock = (dict:NSDictionary?,error:NSError?) -> Void 

    var block: JSONParserBlock! 
    var Data:NSMutableData?=nil 
    var delegate:JsonParserDelegate? 
    var DICT:NSDictionary! 
    var error: NSErrorPointer=nil 
    func Getdata(WebService: String, RequsetedParameter Param:NSDictionary?, BLOCK: JSONParserBlock!) -> Void 
    { 
     self.block=BLOCK; 
     Data = NSMutableData() 
     let urlPath: String = "http://192.168.13.2/freshbakala/admin/json/GetCategory.php" 
     let url: NSURL = NSURL(string: urlPath)! 
     let request: NSURLRequest = NSURLRequest(URL: url) 
     let connection: NSURLConnection = NSURLConnection(request: request, delegate: self, startImmediately: true)! 
     connection.start() 
    } 

    func connection(didReceiveResponse: NSURLConnection!, didReceiveResponse response: NSURLResponse!) 
    { 
     self.Data = NSMutableData() 
    } 
    func connection(connection: NSURLConnection!, didReceiveData data: NSData!) 
    { 
     self.Data?.appendData(data) 
    } 
    func connectionDidFinishLoading(connection: NSURLConnection!) 
    { 
     let error:NSError 
     let jsonresult:NSDictionary 
     print("Response is received") 
     do 
     { 
      jsonresult = try NSJSONSerialization.JSONObjectWithData(self.Data!, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary 
      print(jsonresult) 
      block(dict: jsonresult,error: nil) 

     } 
     catch 
     { 

     } 

    } 
} 
+0

Können Sie den gesamten Code dieser beiden Klassen anzeigen? –

Antwort

1

Ein weiteres Problem, zusätzlich zu dem Thema hingewiesen durch Mrwerdo ist, dass dieser Code:

var objJsonParser:JsonParser? 

objJsonParser?.Getdata(str as String, RequsetedParameter:Dictionary, BLOCK: { 
    (dict, error) in 
    print("success") 
}) 

nicht wirklich etwas tun und wird nicht beschweren, weil objJsonParser ist null, es sei denn, Sie weisen ihm etwas zu, und ? im Aufruf bedeutet, dass GetData nichts tut, weil das Objekt null ist.

1

Sie müssen den Verschluss in der GetData Funktion aufzurufen. So etwas wie dies tun sollten:

func Getdata(WebService: String, RequsetedParameter Param:NSDictionary?, BLOCK: JSONParserBlock!) -> Void 
{ 
    let dict: NSDictionary? = nil // set these to something meaningful 
    let error: NSError? = nil 
    BLOCK(dict: dict, error: error) // call the closure 
} 
+0

Ja, 'BLOCK' ist nur ein Parameter für die Funktion. Der Funktionskörper ist leer, daher wird der Block nicht ausgeführt. – JeremyP

Verwandte Themen