我在一个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
}
}
}
我在另一个VC(let temp = ViewController.MyStruct(id: 10, name: "Example")
)中创建了一个struct实例,并将其传递给我通过Segue创建结构的那个。执行temp.checkValues()
时,我得到了
id: Optional(10) name: Optional("Example")
根据我对(非)选项的理解,我不应该得到Optional()
,因为我用!
声明了变量。我弄错了吗?现在我只要在使用它时就加上一个感叹号。我也尝试在结构中使用init
,但这并没有改变任何东西。
因为这不是预期的(如果我是对的)我担心我没有得到完整的概念......请告诉我我的代码/我有什么问题。
答案 0 :(得分:7)
我弄错了吗?
是。您的变量是选项 - !
运算符是强制解包运算符,因此您的变量隐式展开。如果您不希望自己的变量成为选项,只需删除!
。
Swift中存在!
运算符,以便于从Objective-C进行桥接,例如IBOutlet
变量。除此之外使用!
运算符是一种不好的做法。
答案 1 :(得分:5)
!
是一个隐含无法解开的可选。以!
结尾的所有变量声明类型都是可选的。你不必将它们声明为Optional
。只需正常使用它们,初始化程序就会照顾它们:
struct MyStruct {
let id: Int64
let name: String
func checkValues() -> Bool {
print("id: \(id) name: \(name)"); return true
}
}