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 在进行HTTP请求和简单身份验证时遇到问题_Swift - Fatal编程技术网

Swift 在进行HTTP请求和简单身份验证时遇到问题

Swift 在进行HTTP请求和简单身份验证时遇到问题,swift,Swift,我是obj c/swift的新手,尝试连接到RESTful api,并不断出现致命错误“在展开可选值时意外发现零”: var request = NSURLRequest(URL: url!) 我用这个例子来完成任务-。我正在尝试使用用户名和密码登录到url中包含私有api_密钥的应用程序 import UIKit class ViewController: UIViewController, NSURLConnectionDataDelegate { @IBOutlet weak var

我是obj c/swift的新手,尝试连接到RESTful api,并不断出现致命错误“在展开可选值时意外发现零”:

var request = NSURLRequest(URL: url!)
我用这个例子来完成任务-。我正在尝试使用用户名和密码登录到url中包含私有api_密钥的应用程序

import UIKit

class ViewController: UIViewController, NSURLConnectionDataDelegate {

@IBOutlet weak var usernameTextField: UITextField!
@IBOutlet weak var passwordTextField: UITextField!


@IBAction func signInButton(sender: AnyObject) {
    var url = NSURL(string: "MY URL")
    var request = NSURLRequest(URL: url!)
    var connection = NSURLConnection(request: request, delegate: self, startImmediately: true)

}

func connection(connection: NSURLConnection, willSendRequestForAuthenticationChallenge challenge: NSURLAuthenticationChallenge!) {
    if challenge.previousFailureCount > 1 {

    } else {
        let creds = NSURLCredential(user: usernameTextField.text, password: passwordTextField.text, persistence: NSURLCredentialPersistence.None)
        challenge.sender.useCredential(creds, forAuthenticationChallenge: challenge)
    }
}

func connection(connection: NSURLConnection!, didReceiveResponse response: NSURLResponse) {
    let status = (response as NSHTTPURLResponse).statusCode
    println("status code is \(status)")
}

我假设您已经有了一个实际的URL,并将其传递给NSURL初始值设定项?您正在强制展开该url,这可能是“意外发现零”错误的原因,因为NSURL的初始值设定项可能会失败。使用
if-let
绑定来打开可选的,如果它是有效的。

您使用的URL(
“我的URL”
)应该是格式良好的,并且根据苹果公司的说法,应该遵守

如果URL格式不正确,
NSURL
将返回
nil
。下一行将失败,因为您强制展开了
url
变量(感叹号(
)的用途)。如果您对设置为
nil
的变量执行强制展开,如在
NSURLRequest
中,您的应用程序将在运行时崩溃,返回“在展开可选值时意外发现nil”

如果要检查变量是否正确初始化且未设置为
nil
,可以执行以下操作:

if let url = NSURL(string: "MY URL") {
    var request = NSURLRequest(URL: url!)
    var connection = NSURLConnection(request: request, delegate: self, startImmediately: true)
}
else {
    println("url is set to nil)
}
要立即解决您的问题,请确保您的url格式正确