2016-04-25 19 views
3

私はSwiftでブロックを作成しようとしています。Swiftでブロックを作成しても機能しません。

私は、クラスを作成し、この

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

変数宣言のようなブロックを宣言している:

var block: JSONParserBlock!

と機能:

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

しかし、ときに私、私の問題がありますこれを呼び出す

var objJsonParser:JsonParser? 

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

カスタムクラスコード

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

この2つのクラスのコード全体を表示できますか? –

答えて

1

別の問題、問題に加えて、Mrwerdoによって指摘され、このコードということである。

var objJsonParser:JsonParser? 

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

が実際に何もしないとobjJsonParserので文句はありません何かを指定しないかぎりnilであり、呼び出しの中の?は、オブジェクトがnilなので何もしないことを意味します。

1

あなたはGetData機能でクロージャを呼び出す必要があります:機能別のクラスから、この機能は

関数呼び出しを実行しませんが、このようなものです。このような何かを行う必要があります。

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

はい、 'BLOCK'は関数の単なるパラメータです。関数の本体が空であるため、ブロックは実行されません。 – JeremyP

関連する問題