Swift 4.1中如何修复type(of:)引发的「变量在自身初始值中使用」错误?
解决Swift 4.1中
type(of:)变量初始化时的"Variable used within its own initial value"错误 哈哈,这个问题我之前也碰到过!本质就是个命名冲突的小坑——你把变量命名成了type,刚好和Swift标准库的type(of:)函数里的type重名了,编译器直接懵了,分不清你是要调用函数还是引用刚声明的变量,所以才抛出这个“Variable used within its own initial value”的错误。
有两种简单的修复方式:
方式一:给变量换个不冲突的名字
这是最直观也最推荐的做法,只要把变量名改成valueType、itemType这类不会和系统函数名重叠的名字就行,代码修改后如下:
func printInfo(_ value: Any) { let valueType = type(of: value) print("'\(value)' of type '\(valueType)'") }
方式二:明确指定函数的作用域
如果你特别想用type作为变量名,也可以通过加上模块名Swift来明确告诉编译器,你调用的是标准库的type(of:)函数,而不是刚声明的局部变量:
func printInfo(_ value: Any) { let type = Swift.type(of: value) print("'\(value)' of type '\(type)'") }
本质上,这个错误是Swift的作用域规则导致的:局部作用域的变量会覆盖全局作用域的同名标识符,所以在初始化type变量时,编译器会优先认为你在引用这个还没完成初始化的局部变量,从而触发错误。上面两种方法都能帮你解决这个作用域冲突的问题。
内容的提问来源于stack exchange,提问作者quangkid
相关产品推荐
相关产品推荐

