1, 首先,在初始化变量的时候给予变量付初始值:这个时候既不需要!也不需要?
理由:因为值确定(内部实际上已经做过拆包动作),swift可以根据你的值进行推导出你的类型 , 如果这个时候你声明的变量所推导出得类型和你的实际类型不同。那么,你需要为变量指定类型,或者在程序中进行转化
2, 如果你声明了一个变量,但不希望为它付初始值(或者它有可能是空值),那么这就是一个可选类型,你可以使用?进行标注 ,如果这样,在你实际应用的时候: varabc:String? if abc?.count >0{} ,因为你没有进行赋值,而它是个可空类型,那么就会报错,这个时候解决这类问题的时候需要你在声明时或者声明后进行复制,并且使用!进行强制拆包。如果您不对它进行赋值,并且直接强行拆包,那么会出现拆包为空而导致的系统报错 ;因此强制拆包是必须得保证声明的变量是经过赋值的
3,在定义一个函数的时候

可以肯定的是:name1如果传空在走到函数体的时候是肯定报错的! 而name3如果传空是可行的 那么name2呢? 其实根据第一条内容可以知道,在调用函数的时候已经经过了拆包而不需要进行强制拆包,如果这个时候传入空值的话,会直接出错:它是一个不可为空的string类型的参数