Swift 为什么我可以有一个非可选字段和没有初始值设定项
我有一门考试课:Swift 为什么我可以有一个非可选字段和没有初始值设定项,swift,initialization,Swift,Initialization,我有一门考试课: class OrderParserTests: XCTestCase { var previewJson : String! override func setUp(){ let path = Bundle(for: type(of: self)).path(forResource: "orderDocumentPreviewResponse", ofType: "json") ?? "" self.previewJson =
class OrderParserTests: XCTestCase {
var previewJson : String!
override func setUp(){
let path = Bundle(for: type(of: self)).path(forResource: "orderDocumentPreviewResponse", ofType: "json") ?? ""
self.previewJson = try! String(contentsOfFile: path)
}
func testStandardOrder(){
...
}
}
previewJson
是String类型,但我不需要初始值设定项来设置它,它以默认值nil开始,即使它是一个非可选字段(我认为)
我误解了什么!你喜欢田野吗
两者的区别是什么
var previewJson: String?
var previewJson: String?
及
var previewJson: String!
String代码>是一个。如果您尝试访问应用程序的值,而该值为nil
,并且您不希望它出现,则应用程序仍会崩溃。隐式展开选项对于无法在初始化时为其设置值的变量非常有用,但要知道,在使用之前肯定会设置这些变量。相关:
隐式展开的可选项是
场景,但也可以像非可选值一样使用,而不使用
每次访问可选值时,需要将其展开
既不是var-previewJson:String?
也不是var-previewJson:String
将需要一个自定义的init
,因为它们都将默认值设置为nil
字符串代码>是一个。如果您尝试访问应用程序的值,而该值为nil
,并且您不希望它出现,则应用程序仍会崩溃。隐式展开选项对于无法在初始化时为其设置值的变量非常有用,但要知道,在使用之前肯定会设置这些变量。相关:
隐式展开的可选项是
场景,但也可以像非可选值一样使用,而不使用
每次访问可选值时,需要将其展开
既不是var-previewJson:String?
也不是var-previewJson:String
将需要自定义init
,因为它们都将默认值设置为nil
两者的区别是什么
var previewJson: String?
var previewJson: String?
及
var previewJson: String!
不多。它们都是可选的,表面上包裹着一根线。它们都自动初始化为nil
。它们都受相同的规则管辖。差不多
主要区别在于String
您可以说类似于previewJson.lowercased()
之类的话,而无需显式地展开可选代码
你明白为什么这很特别吗?使用String?
您必须说previewJson?.lowercased()
或previewJson!。小写()
。您也可以使用String代码>,但您不必这样做,因为字符串
遵循一条特殊规则,即如果在需要非可选字符串的地方使用它,它将为您打开可选字符串
所以一个字符串
是可选的,就像字符串?
一样,只是在某些压力条件下,它会自动展开。就这些
两者的区别是什么
var previewJson: String?
var previewJson: String?
及
var previewJson: String!
不多。它们都是可选的,表面上包裹着一根线。它们都自动初始化为nil
。它们都受相同的规则管辖。差不多
主要区别在于String
您可以说类似于previewJson.lowercased()
之类的话,而无需显式地展开可选代码
你明白为什么这很特别吗?使用String?
您必须说previewJson?.lowercased()
或previewJson!。小写()
。您也可以使用String代码>,但您不必这样做,因为字符串
遵循一条特殊规则,即如果在需要非可选字符串的地方使用它,它将为您打开可选字符串
所以一个字符串
是可选的,就像字符串?
一样,只是在某些压力条件下,它会自动展开。仅此而已。请先看。它们间接地帮助你更好地了解optionalsAlso先看后看。它们间接地帮助您更好地了解OptionalSal,因此我应该添加字符串代码>也很危险。这是因为如果它是nil
,并且您确实说了类似previewJson.lowercased()
的话,您将崩溃。一个普通的可选选项会让你在崩溃前思考自己在做什么,但是一个自动展开的可选选项只会崩溃而不眨眼代码>也很危险。这是因为如果它是nil
,并且您确实说了类似previewJson.lowercased()
的话,您将崩溃。一个普通的选项会让你在崩溃前思考自己在做什么,而一个自动展开的选项只会崩溃而不眨眼。