只需在 Swift 中请求一个 url
Simply request an url in Swift
我的 arduino 上有 运行 一个非常基本的网络服务器,它在输入 url (.../?ledOn) 时打开 LED,在输入 ( .../?ledOff).
现在我从这个网站 here:
找到了一段视频,介绍如何使用看起来非常简单的 objective c 代码来控制这两种状态
- (IBAction)switchPressed:(id)sender {
UISwitch *theSwitch = (UISwitch *) sender;
if (theSwitch.isOn) {
NSURL *url = [NSURL URLWithString:@".../?ledOn"];
NSURLRequest *req = [NSURLRequest requestWithURL:url];
[myWebView loadRequest:req]
}
}
所以我尝试将此代码转换为swift,但是出现错误,在创建NSURL
变量时,我得到了一个NSURL?
[=17=类型的变量]
当前的 Swift 尝试看起来像:
var url = NSURL(string: ".../?buttonOn")
var reqest = NSURLRequest(URL: NSURL(url))
三种修复方法:
第一个:将url常量声明为可选
let url : NSURL? = NSURL(string: "http://korfay.ddns.net/?buttonOn")
if let unwrappedURL = url {
var reqest = NSURLRequest(URL: url!)
// do the work here
}
第二个:强制 url 常量显示值(如果值为 nil 可能会崩溃):
let url = NSURL(string: "http://korfay.ddns.net/?buttonOn")
var reqest = NSURLRequest(URL: url!)
第三个:强制展开:
let url : NSURL! = NSURL(string: "http://korfay.ddns.net/?buttonOn")
var reqest = NSURLRequest(URL: url)
我建议用 NSURLSession
调用替换网络视图。顺便说一句,这也消除了构建 NSURLRequest
的需要。
因此:
@IBAction func switchPressed(sender: UISwitch) {
if sender.on {
let url = NSURL(string: ".../?ledOn")!
let task = NSURLSession.sharedSession().dataTaskWithURL(url) { data, response, error in
// parse `data` or examine `error` here, e.g.
//
// if error != nil {
// println("\(error)")
// }
}
task.resume()
}
}
或者,如果您需要更新报告错误的 UI,请确保将其分派回主队列:
@IBAction func switchPressed(sender: UISwitch) {
if sender.on {
let url = NSURL(string: ".../?ledOn")!
let task = NSURLSession.sharedSession().dataTaskWithURL(url) { data, response, error in
if error != nil {
dispatch_async(dispatch_get_main_queue()) {
//update UI reporting error here
}
}
}
task.resume()
}
}
我的 arduino 上有 运行 一个非常基本的网络服务器,它在输入 url (.../?ledOn) 时打开 LED,在输入 ( .../?ledOff).
现在我从这个网站 here:
找到了一段视频,介绍如何使用看起来非常简单的 objective c 代码来控制这两种状态- (IBAction)switchPressed:(id)sender {
UISwitch *theSwitch = (UISwitch *) sender;
if (theSwitch.isOn) {
NSURL *url = [NSURL URLWithString:@".../?ledOn"];
NSURLRequest *req = [NSURLRequest requestWithURL:url];
[myWebView loadRequest:req]
}
}
所以我尝试将此代码转换为swift,但是出现错误,在创建NSURL
变量时,我得到了一个NSURL?
[=17=类型的变量]
当前的 Swift 尝试看起来像:
var url = NSURL(string: ".../?buttonOn")
var reqest = NSURLRequest(URL: NSURL(url))
三种修复方法:
第一个:将url常量声明为可选
let url : NSURL? = NSURL(string: "http://korfay.ddns.net/?buttonOn")
if let unwrappedURL = url {
var reqest = NSURLRequest(URL: url!)
// do the work here
}
第二个:强制 url 常量显示值(如果值为 nil 可能会崩溃):
let url = NSURL(string: "http://korfay.ddns.net/?buttonOn")
var reqest = NSURLRequest(URL: url!)
第三个:强制展开:
let url : NSURL! = NSURL(string: "http://korfay.ddns.net/?buttonOn")
var reqest = NSURLRequest(URL: url)
我建议用 NSURLSession
调用替换网络视图。顺便说一句,这也消除了构建 NSURLRequest
的需要。
因此:
@IBAction func switchPressed(sender: UISwitch) {
if sender.on {
let url = NSURL(string: ".../?ledOn")!
let task = NSURLSession.sharedSession().dataTaskWithURL(url) { data, response, error in
// parse `data` or examine `error` here, e.g.
//
// if error != nil {
// println("\(error)")
// }
}
task.resume()
}
}
或者,如果您需要更新报告错误的 UI,请确保将其分派回主队列:
@IBAction func switchPressed(sender: UISwitch) {
if sender.on {
let url = NSURL(string: ".../?ledOn")!
let task = NSURLSession.sharedSession().dataTaskWithURL(url) { data, response, error in
if error != nil {
dispatch_async(dispatch_get_main_queue()) {
//update UI reporting error here
}
}
}
task.resume()
}
}