大佬教程收集整理的这篇文章主要介绍了ios – Swift元组到可选分配,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
import Foundation class BaseCommand:NSOperation { var status:Int? = nil var message:string? = nil func buildrequest() -> NSData? { return nil } func parseResponse(data:NSData?) -> (Status:Int,Error:string) { return (200,"success") } override func main() { let requestBody = self.buildrequest() println("Sending body \(requestBody)") // do network op var networkResultBody = "test" var resultBody:NSData = networkResultBody.dataUsingEncoding(NSUTF8StringEncoding)! (self.status,self.messagE) = self.parseResponse(resultBody) } }
问题在最后一行:
(self.status,self.messagE) = self.parseResponse(resultBody)
编译器说“不能表达元组转换(Status:Int,Error:String)to(Int?String?)”
我明白问题是self.status和self.message是可选的,parseResponse不返回可选(我不想它).我如何告诉它做必要的分配和转换,以获取数据到实例变量?
(self.status!,self.message!) = self.parseResponse(resultBody)
我发现这是不安全的.如果任务中的self.status或self.message为零,则会崩溃.在游乐场尝试这个测试:
class Test { var status: Int? var error: String? func parseResponse() -> (Status:Int,"success") } func testIt() { (self.status!,self.error!) = parseResponse() print(self.status) print(self.error) } } let myTest = test() myTest.testIt()
这是另一种可以做的事情:
let (stat,err) = self.parseResponse(resultBody) (self.status,self.error) = (Optional(stat),Optional(err))
或者,@AndriyGordiychuk发现,它的工作没有可选:
let (stat,self.error) = (stat,err)
好奇的是,它的作用是,但分配的功能的结果没有.
请注意以下实验:
var i: Int? var s: String? // This works (i,s) = (3,"Hello") // This fails with error: cAnnot express tuple conversion '(Int,String)' to '(Int?,String?) let t = (3,"Hello") (i,s) = t
看来,当赋值是分配给元组的元组文字时,Swift需要一个快捷方式,而不是首先构造元组.相反,只是分配单个元素.
所以这:
(i,"Hello")
相当于:
i = 3 s = "Hello"
以上是大佬教程为你收集整理的ios – Swift元组到可选分配全部内容,希望文章能够帮你解决ios – Swift元组到可选分配所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。