只需在 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()
    }
}