当我在NSUserDefaults
上调用setObject
时,它需要forKey:
才能编译。但是在其他方法之前我不需要任何东西,比如objectForKey
。为什么呢?
如此:NSUserDefaults.standardUserDefaults().setObject(myString, forKey: "myString")
这不是:NSUserDefaults.standardUserDefaults().setObject(myString, "myString")
不需要在第一个参数前面加xxx::NSUserDefaults.standardUserDefaults().objectForKey("myString")
如何知道何时在参数前提供前缀xxx和冒号?除了依赖Xcode的自动完成或编译错误?
当我在NSUserDefaults上调用setObject时,它需要一个forKey:才能编译。但在其他方法之前我不需要任何东西,比如objectForKey。为什么呢?
Objective-C的方法是:
-setObject:forKey:
接受两个形参——对象和一个键。另一方面,objectForKey:
只接受一个参数(键)并返回一个对象。
如何知道何时在参数前提供前缀xxx和冒号?除了依赖Xcode的自动完成或编译错误?
你需要知道你调用的是什么方法。你可以查一下。例如,NSUserDefaults文档提供了你想要的方法的Swift原型:
func setObject(_ value: AnyObject?,
forKey defaultName: String)
或者,如果你碰巧知道Objective-C原型
- (void)setObject:(id)value
forKey:(NSString *)defaultName
在你的头脑中掌握转换的窍门并不需要很长时间
在swift函数中,不需要第一个参数标签(init
方法除外)。因此,如果函数只有一个参数,则不需要指定参数标签。这就是为什么objectForKey:
没有任何标签的原因。setObject:forKey:
需要两个参数,所以第二个参数需要一个标签。
默认情况下,第一个参数省略其外部名称,而第二个和随后的参数使用它们的本地名称作为它们的外部的名字。所有参数必须具有唯一的本地名称。虽然多个参数可能具有相同的外部名称,唯一的外部名称有助于使您的代码更具可读性。
参考:Swift文档
如果我理解正确的话,在向函数传递实参时,通常不需要包含第一个形参名。
func someFunction(firstParameterName: Int, secondParameterName: Int) {
// function body goes here
// firstParameterName and secondParameterName refer to
// the argument values for the first and second parameters
}
someFunction(1, secondParameterName: 2)
默认情况下,第一个参数省略其外部名称,而第二个和随后的参数使用它们的本地名称作为它们的外部的名字。所有参数必须具有唯一的本地名称。虽然多个参数可能具有相同的外部名称,唯一的外部名称有助于使您的代码更具可读性。
希望这对你有帮助。你可以在这里阅读更多内容:Swift中函数参数命名
方法/函数签名
- 左括号 之前的所有内容
- 逗号和冒号之间的所有内容(包括逗号和冒号)