Swift编译器何时将变量推断为隐式展开的可选变量?

Swift编译器何时将变量推断为隐式展开的可选变量?,swift,Swift,Swift编译器何时将变量推断为隐式展开的可选变量?或者变量必须始终使用声明!要将其视为这样,类型推断将在编译时进行。将变量推断为隐式展开可选变量的唯一方法是为其指定一个变量(直接或通过指定函数的返回值,该函数返回隐式展开可选变量) 基本上,变量的“可选性”是其类型的一部分。以下变量的类型 x和 y>代码>是代码>隐式打开可选的int (两者都是),并且最重要的是,类型系统不认为这是与“代码> INT/CODE >相同的类型。(尽管您可以将其与Int互换使用,只要它不是nil) 奇怪的是,当您必

Swift编译器何时将变量推断为隐式展开的可选变量?或者变量必须始终使用声明!要将其视为这样,类型推断将在编译时进行。将变量推断为隐式展开可选变量的唯一方法是为其指定一个变量(直接或通过指定函数的返回值,该函数返回隐式展开可选变量)

基本上,变量的“可选性”是其类型的一部分。以下变量的类型<代码> x和<代码> y>代码>是代码>隐式打开可选的int (两者都是),并且最重要的是,类型系统不认为这是与“代码> INT/CODE >相同的类型。(尽管您可以将其与
Int
互换使用,只要它不是
nil


奇怪的是,当您必须指定时,它被称为隐式展开!,它似乎应该被显式地称为unwrapped?您在声明中对它是显式的,但是在整个代码中,unwrapping是隐式的-不需要!或者?。它被隐式地称为“未包装”。在swift中,只有期权可以为零。通常,您有类似于
varx:Int?=7
而要到达
7
你需要写
x(将其展开)。通过使用“隐式展开可选”,您不必编写
x
要访问
7
,只需编写
x
。我在@Boon上写了一个详细的差异解释(在上一篇文章中忘记提到你了,oops!)要“显式包装”,它应该是
Int?
(如果不使用强制展开运算符(即
x!
),就无法访问该值)谢谢Jiaaro。?在引擎盖下是可选的,那么隐式展开可选的呢?有表示吗?据我所知,只有
IBOutlets
被推断为隐式展开。其他所有内容都需要用
声明。其原因称为“隐式展开”这是因为您可以访问它的属性,而无需先将其展开。除此之外,它的行为与OptionalHanks Jack相同,是IBOutlet上的有用位。就其行为与可选行为相同而言,它不能包含nil,对吗?是的,它可以,它是一个“隐式展开的可选”这意味着它是一个可选的-只是当你访问属性时,你不必首先将其展开。就是这样..谢谢Jack,可以使用?是的,就像我说的,它的行为与任何其他可选的行为完全一样,有一个额外的区别,隐式展开可选参与可选链接,就像普通可选的一样
let x: Int! = 7

fund make_y() -> Int! {
  return 7
}

let y = make_y()