Mic*_*ael 2 struct optional swift
我在一个ViewController中有一个结构,它有几个非可选成员,如:
struct MyStruct {
let id: Int64!
let name: String!
func checkValues() -> Bool {
if id == nil || name == nil {
return false
} else {
print("id: \(id) name: \(name)"); return true
}
}
}
Run Code Online (Sandbox Code Playgroud)
我在另一个VC(let temp = ViewController.MyStruct(id: 10, name: "Example"))中创建了一个struct实例,并将它传递给我通过Segue创建结构的那个.执行时,temp.checkValues()我得到
id: Optional(10) name: Optional("Example")
Run Code Online (Sandbox Code Playgroud)
从我对(非)选项的理解,我不应该得到Optional()自从我用变量声明!.我弄错了吗?现在我只要在使用它时就加上一个感叹号.我也试过init 在结构中使用,但没有改变任何东西.因为这不是预期的(如果我是对的)我担心我没有得到完整的概念......请告诉我我的代码/我有什么问题.
我弄错了吗?
是.您的变量是可选项 - !运算符是强制解包运算符,因此您的变量是隐式展开的.如果您不希望变量成为选项,请删除!.
该!运营商在斯威夫特的存在是为了方便从Objective-C的桥接,例如用于IBOutlet变量.!除此之外使用操作员是一种不好的做法.
!是一个隐含的未包装的选项.以结尾的所有变量声明的类型! 是可选的.你不必宣称它们是Optionals.只需正常使用它们,初始化程序就会照顾它们:
struct MyStruct {
let id: Int64
let name: String
func checkValues() -> Bool {
print("id: \(id) name: \(name)"); return true
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
505 次 |
| 最近记录: |