Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有人能找到错误并验证我的Swift NSURLSession代码吗?_Swift_Http_Post_Nsurlsession - Fatal编程技术网

有人能找到错误并验证我的Swift NSURLSession代码吗?

有人能找到错误并验证我的Swift NSURLSession代码吗?,swift,http,post,nsurlsession,Swift,Http,Post,Nsurlsession,我正在使用Swift编写我的第一个基本IOS应用程序,它将轮询Proliphix IP恒温器并显示温度。我已经使用Paw将HTTP Post转换为NSURLSession,但是当我在Xcode中加载它时,转换后的代码似乎有3个语法错误 我现在的目标是让它在操场上工作,但最终在我的应用程序代码中使用它。有人能在你自己的Xcode操场上加载这段代码并修复错误并使其正常工作吗?URL是恒温器的公共IP地址,如果工作正常,它将轮询恒温器,并返回OID4.3.2.3的值和=类似772&(当前为77.2度)

我正在使用Swift编写我的第一个基本IOS应用程序,它将轮询Proliphix IP恒温器并显示温度。我已经使用Paw将HTTP Post转换为NSURLSession,但是当我在Xcode中加载它时,转换后的代码似乎有3个语法错误

我现在的目标是让它在操场上工作,但最终在我的应用程序代码中使用它。有人能在你自己的Xcode操场上加载这段代码并修复错误并使其正常工作吗?URL是恒温器的公共IP地址,如果工作正常,它将轮询恒温器,并返回OID4.3.2.3的值和=类似772&(当前为77.2度)

最后,我用来转换的HTTP Post来自以下内容,Paw将其转换为上面的NSURLSession

POST /get HTTP/1.1
Authorization: Basic dXNlcjpwYXNzd29yZA==
Content-Type: application/x-www-form-urlencoded
Host: my-thermostat.dyndns.org:8083
Connection: close
User-Agent: Paw/2.2.2 (Macintosh; OS X/10.10.4) GCDHTTPRequest
Content-Length: 11

OID4.3.2.3=

谢谢你的帮助

如果我用你的代码创建一个游乐场,我会得到三个错误

一个位于函数
sendRequest()
中,您必须在其中更改此行:

let statusCode=(响应为NSHTTPURLResponse)。statusCode

let statusCode=(响应为!NSHTTPURLResponse)。statusCode

as!
而不是
as

函数
stringFromQueryParameters
中的一个,您必须在其中更改以下行

parts.追加(部分)

parts.append(部分作为字符串)

(将
添加为字符串

在函数
nsurl中添加一个查询参数
,您必须在其中更改:

返回NSURL(string:URLString)

为此:

返回NSURL(字符串:URLString作为字符串)

(将
添加为字符串

然后编译器似乎很满意…至少在我的机器上:-)

是的,你需要导入基金会和XCPlayground,你已经知道了。p> 此外,如果您需要进行异步调用……就像这里的情况一样,您需要在代码顶部使用此方法:

XCPSetExecutionShouldContinueIndefinitely()

(您可以阅读更多关于它的信息)

最后,要实际查看代码的运行情况,可以在类定义之后将其添加到代码的底部:

let requestController = MyRequestController()
requestController.sendRequest()
这是完整的代码

import Foundation
import XCPlayground

XCPSetExecutionShouldContinueIndefinitely()

class MyRequestController {
    func sendRequest() {
        /* Configure session, choose between:
        * defaultSessionConfiguration
        * ephemeralSessionConfiguration
        * backgroundSessionConfigurationWithIdentifier:
        And set session-wide properties, such as: HTTPAdditionalHeaders,
        HTTPCookieAcceptPolicy, requestCachePolicy or timeoutIntervalForRequest.
        */
        let sessionConfig =   NSURLSessionConfiguration.defaultSessionConfiguration()

        /* Create session, and optionally set a NSURLSessionDelegate. */
        let session = NSURLSession(configuration: sessionConfig, delegate: nil, delegateQueue: nil)

        /* Create the Request:
        My API (POST http://my-thermostat.dyndns.org:8083/get)
        */

        var URL = NSURL(string: "http://my-thermostat.dyndns.org:8083/get")
        let request = NSMutableURLRequest(URL: URL!)
        request.HTTPMethod = "POST"

       // Headers

        request.addValue("Basic dXNlcjpwYXNzd29yZA==", forHTTPHeaderField: "Authorization")

        // Form URL-Encoded Body

        let bodyParameters = [
            "OID4.3.2.3": "",
         ]
        let bodyString = self.stringFromQueryParameters(bodyParameters)
        request.HTTPBody = bodyString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)

        /* Start a new Task */
        let task = session.dataTaskWithRequest(request, completionHandler: { (data : NSData!, response : NSURLResponse!, error : NSError!) -> Void in
            if (error == nil) {
                // Success
                let statusCode = (response as! NSHTTPURLResponse).statusCode
                println("URL Session Task Succeeded: HTTP \(statusCode)")
            }
            else {
                // Failure
                println("URL Session Task Failed: %@", error.localizedDescription);
            }
        })
        task.resume()
    }

    /**
    This creates a new query parameters string from the given NSDictionary. For
    example, if the input is @{@"day":@"Tuesday", @"month":@"January"}, the output
    string will be @"day=Tuesday&month=January".
    @param queryParameters The input dictionary.
    @return The created parameters string.
    */
    func stringFromQueryParameters(queryParameters : Dictionary<String, String>) -> String {
        var parts: [String] = []
        for (name, value) in queryParameters {
            var part = NSString(format: "%@=%@",
               name.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!,
            value.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!)
            parts.append(part as String)
        }
        return "&".join(parts)
    }

    /**
    Creates a new URL by adding the given query parameters.
    @param URL The input URL.
    @param queryParameters The query parameter dictionary to add.
    @return A new NSURL.
    */
    func NSURLByAppendingQueryParameters(URL : NSURL!, queryParameters : Dictionary<String, String>) -> NSURL {
        let URLString : NSString = NSString(format: "%@?%@", URL.absoluteString!, self.stringFromQueryParameters(queryParameters))
       return NSURL(string: URLString as String)!
    }
}

let requestController = MyRequestController()
requestController.sendRequest()
<代码>导入基础 导入运动场 XCPSetExecutionShouldContinueIndefinitely() 类MyRequestController{ func sendRequest(){ /*配置会话,选择以下选项: *默认会话配置 *临时会话配置 *BackgroundSessionConfiguration WithIdentifier: 并设置会话范围的属性,例如:HTTPAdditionalHeaders, HTTPCookieAcceptPolicy、requestCachePolicy或TimeOutiterValforRequest。 */ 让sessionConfig=NSURLSessionConfiguration.defaultSessionConfiguration() /*创建会话,并可以选择设置NSURLSessionDelegate*/ let session=NSURLSession(配置:sessionConfig,委托:nil,委托队列:nil) /*创建请求: 我的API(POST)http://my-thermostat.dyndns.org:8083/get) */ var URL=NSURL(字符串:”http://my-thermostat.dyndns.org:8083/get") let request=NSMutableURLRequest(URL:URL!) request.HTTPMethod=“POST” //标题 request.addValue(“基本dXNlcjpwYXNzd29yZA==”,用于HttpHeaderField:“授权”) //表单URL编码体 设bodyParameters=[ “OID4.3.2.3”:“, ] 让bodyString=self.stringFromQueryParameters(bodyParameters) request.HTTPBody=bodyString.dataUsingEncoding(NSUTF8StringEncoding,allowLossyConversion:true) /*开始一项新任务*/ 让task=session.dataTaskWithRequest(请求,completionHandler:{(数据:NSData!,响应:NSURLResponse!,错误:NSError!)->在中无效 如果(错误==nil){ //成功 让statusCode=(响应为!NSHTTPURLResponse)。statusCode println(“URL会话任务成功:HTTP\(状态码)”) } 否则{ //失败 println(“URL会话任务失败:%@”,错误。localizedDescription); } }) task.resume() } /** 这将从给定的NSDictionary创建一个新的查询参数字符串 例如,如果输入为@{@“day”:@“星期二”@“月”:@“一月”},则输出 字符串将为@“天=星期二&月=一月”。 @param queryParameters输入字典。 @返回创建的参数字符串。 */ func stringFromQueryParameters(queryParameters:Dictionary)->String{ 变量部分:[字符串]=[] 用于查询参数中的(名称、值){ var part=NSString(格式:“%@=%@”, name.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!, value.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!) parts.append(部分作为字符串) } 返回“&”。连接(零件) } /** 通过添加给定的查询参数来创建新的URL。 @参数URL输入URL。 @param queryParameters要添加的查询参数字典。 @返回一个新的NSURL。 */ func NSURL通过附加queryParameters(URL:NSURL!,queryParameters:Dictionary)->NSURL{ 设URLString:NSString=NSString(格式:“%@?%@”、URL.absoluteString!、self.stringFromQueryParameters(queryParameters)) 返回NSURL(字符串:URLString作为字符串)! } } 让requestController=MyRequestController() requestController.sendRequest()

希望这有帮助

谢谢!谢谢你的时间!最后一个问题;如何在操场上看到成绩?我正在寻找返回的OID值。我需要打印报表吗?不客气。很高兴看到您正在取得进展:-)您不需要打印报表。如果你看剧的右边
let requestController = MyRequestController()
requestController.sendRequest()
import Foundation
import XCPlayground

XCPSetExecutionShouldContinueIndefinitely()

class MyRequestController {
    func sendRequest() {
        /* Configure session, choose between:
        * defaultSessionConfiguration
        * ephemeralSessionConfiguration
        * backgroundSessionConfigurationWithIdentifier:
        And set session-wide properties, such as: HTTPAdditionalHeaders,
        HTTPCookieAcceptPolicy, requestCachePolicy or timeoutIntervalForRequest.
        */
        let sessionConfig =   NSURLSessionConfiguration.defaultSessionConfiguration()

        /* Create session, and optionally set a NSURLSessionDelegate. */
        let session = NSURLSession(configuration: sessionConfig, delegate: nil, delegateQueue: nil)

        /* Create the Request:
        My API (POST http://my-thermostat.dyndns.org:8083/get)
        */

        var URL = NSURL(string: "http://my-thermostat.dyndns.org:8083/get")
        let request = NSMutableURLRequest(URL: URL!)
        request.HTTPMethod = "POST"

       // Headers

        request.addValue("Basic dXNlcjpwYXNzd29yZA==", forHTTPHeaderField: "Authorization")

        // Form URL-Encoded Body

        let bodyParameters = [
            "OID4.3.2.3": "",
         ]
        let bodyString = self.stringFromQueryParameters(bodyParameters)
        request.HTTPBody = bodyString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)

        /* Start a new Task */
        let task = session.dataTaskWithRequest(request, completionHandler: { (data : NSData!, response : NSURLResponse!, error : NSError!) -> Void in
            if (error == nil) {
                // Success
                let statusCode = (response as! NSHTTPURLResponse).statusCode
                println("URL Session Task Succeeded: HTTP \(statusCode)")
            }
            else {
                // Failure
                println("URL Session Task Failed: %@", error.localizedDescription);
            }
        })
        task.resume()
    }

    /**
    This creates a new query parameters string from the given NSDictionary. For
    example, if the input is @{@"day":@"Tuesday", @"month":@"January"}, the output
    string will be @"day=Tuesday&month=January".
    @param queryParameters The input dictionary.
    @return The created parameters string.
    */
    func stringFromQueryParameters(queryParameters : Dictionary<String, String>) -> String {
        var parts: [String] = []
        for (name, value) in queryParameters {
            var part = NSString(format: "%@=%@",
               name.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!,
            value.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!)
            parts.append(part as String)
        }
        return "&".join(parts)
    }

    /**
    Creates a new URL by adding the given query parameters.
    @param URL The input URL.
    @param queryParameters The query parameter dictionary to add.
    @return A new NSURL.
    */
    func NSURLByAppendingQueryParameters(URL : NSURL!, queryParameters : Dictionary<String, String>) -> NSURL {
        let URLString : NSString = NSString(format: "%@?%@", URL.absoluteString!, self.stringFromQueryParameters(queryParameters))
       return NSURL(string: URLString as String)!
    }
}

let requestController = MyRequestController()
requestController.sendRequest()