处理 Swift 中的 nil 值
Handle nil value in Swift
NSString(data: data, encoding: NSUTF8StringEncoding)
returns 无。 (正确)如果值为 nil
,我需要将变量 stringResponse
设置为 ""
,否则设置为 NSString(data: data, encoding: NSUTF8StringEncoding)
returns。我是这样做的:
override func start() {
if self.cancelled {
return
}
var stringResponse: String?
var urlString: String!
if self.arduinoConnection.arduinoHTTPPort == 80 {
urlString = String(format: "http://%@/arduino/%@/%i/", arguments: [self.arduinoConnection.arduinoAddress, self.arduinoConnection.pinType.lowercaseString, self.arduinoConnection.arduinoPin])
} else {
urlString = String(format: "http://%@:%i/arduino/%@/%i/", arguments: [self.arduinoConnection.arduinoAddress, self.arduinoConnection.arduinoHTTPPort, self.arduinoConnection.pinType.lowercaseString, self.arduinoConnection.arduinoPin])
}
//let url = NSURL(string: urlString)
let url = NSURL(string: "http://10.0.3.9:8888/index.html")
let request = NSURLRequest(URL: url!)
if self.cancelled {
return
}
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) {(response, data, error) in
stringResponse = NSString(data: data, encoding: NSUTF8StringEncoding) as? String ?? ""
if (stringResponse == "") {
self.arduinoConnection.state = .Failed
self.arduinoConnection.switchState = false
self.arduinoConnection.statusText = "Failed To Connect"
self.delegate?.didFinishDownloading(GettingState.Failed, statusText: "Failed To Connect", switchState: false)
} else {
self.arduinoConnection.state = .Downloaded
if (stringResponse == "0") {
self.arduinoConnection.state = .Downloaded
self.arduinoConnection.switchState = false
self.ardCTS.state = .Downloaded
self.ardCTS.switchState = false
self.arduinoConnection.statusText = "Connected"
self.delegate?.didFinishDownloading(GettingState.Downloaded, statusText: "Connected", switchState: false)
} else if (stringResponse == "1") {
self.arduinoConnection.state = .Downloaded
self.arduinoConnection.switchState = true
self.arduinoConnection.statusText = "Connected"
self.ardCTS.state = .Downloaded
self.ardCTS.switchState = true
self.delegate?.didFinishDownloading(GettingState.Downloaded, statusText: "Connected", switchState: true)
}
}
self.executing = false
self.finished = true
}
executing = true
self.finished = false
}
当应用程序运行这段代码时,我有:
fatal error: unexpectedly found nil while unwrapping an Optional value
请帮帮我!
var stringResponse: String?
NSURLConnection.sendAsynchronousRequest(request,
queue: NSOperationQueue.mainQueue()) {(response, data, error) in
stringResponse = NSString(data: data, encoding: NSUTF8StringEncoding) as? String ?? ""
您没有在测试错误。你可能会被传递一个 nil
NSData,因为这个接口还没有被 Apple 完全审计,并且仍然传递隐式解包的可选值。你必须处理这些。
if let error = error {
// We got an error; do something about it
return
}
// OK, now we know that the data is good
stringResponse = NSString(data: data, encoding: NSUTF8StringEncoding)
您不应该将其转换为任何内容。这个函数returns一个String?
,就是stringResponse
。
NSString(data: data, encoding: NSUTF8StringEncoding)
returns 无。 (正确)如果值为 nil
,我需要将变量 stringResponse
设置为 ""
,否则设置为 NSString(data: data, encoding: NSUTF8StringEncoding)
returns。我是这样做的:
override func start() {
if self.cancelled {
return
}
var stringResponse: String?
var urlString: String!
if self.arduinoConnection.arduinoHTTPPort == 80 {
urlString = String(format: "http://%@/arduino/%@/%i/", arguments: [self.arduinoConnection.arduinoAddress, self.arduinoConnection.pinType.lowercaseString, self.arduinoConnection.arduinoPin])
} else {
urlString = String(format: "http://%@:%i/arduino/%@/%i/", arguments: [self.arduinoConnection.arduinoAddress, self.arduinoConnection.arduinoHTTPPort, self.arduinoConnection.pinType.lowercaseString, self.arduinoConnection.arduinoPin])
}
//let url = NSURL(string: urlString)
let url = NSURL(string: "http://10.0.3.9:8888/index.html")
let request = NSURLRequest(URL: url!)
if self.cancelled {
return
}
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) {(response, data, error) in
stringResponse = NSString(data: data, encoding: NSUTF8StringEncoding) as? String ?? ""
if (stringResponse == "") {
self.arduinoConnection.state = .Failed
self.arduinoConnection.switchState = false
self.arduinoConnection.statusText = "Failed To Connect"
self.delegate?.didFinishDownloading(GettingState.Failed, statusText: "Failed To Connect", switchState: false)
} else {
self.arduinoConnection.state = .Downloaded
if (stringResponse == "0") {
self.arduinoConnection.state = .Downloaded
self.arduinoConnection.switchState = false
self.ardCTS.state = .Downloaded
self.ardCTS.switchState = false
self.arduinoConnection.statusText = "Connected"
self.delegate?.didFinishDownloading(GettingState.Downloaded, statusText: "Connected", switchState: false)
} else if (stringResponse == "1") {
self.arduinoConnection.state = .Downloaded
self.arduinoConnection.switchState = true
self.arduinoConnection.statusText = "Connected"
self.ardCTS.state = .Downloaded
self.ardCTS.switchState = true
self.delegate?.didFinishDownloading(GettingState.Downloaded, statusText: "Connected", switchState: true)
}
}
self.executing = false
self.finished = true
}
executing = true
self.finished = false
}
当应用程序运行这段代码时,我有:
fatal error: unexpectedly found nil while unwrapping an Optional value
请帮帮我!
var stringResponse: String?
NSURLConnection.sendAsynchronousRequest(request,
queue: NSOperationQueue.mainQueue()) {(response, data, error) in
stringResponse = NSString(data: data, encoding: NSUTF8StringEncoding) as? String ?? ""
您没有在测试错误。你可能会被传递一个 nil
NSData,因为这个接口还没有被 Apple 完全审计,并且仍然传递隐式解包的可选值。你必须处理这些。
if let error = error {
// We got an error; do something about it
return
}
// OK, now we know that the data is good
stringResponse = NSString(data: data, encoding: NSUTF8StringEncoding)
您不应该将其转换为任何内容。这个函数returns一个String?
,就是stringResponse
。