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