在 Swift 中,NSUserDefaults 为什么调用 setObject 需要在第二个参数之前有一个"forKey:"



当我在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中函数参数命名

方法/函数签名

  • 左括号
  • 之前的所有内容
  • 逗号和冒号之间的所有内容(包括逗号和冒号)

相关内容

最新更新