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

时间:2015-10-21 19:33:24

标签: ios swift

当我在setObject上致电NSUserDefaults时,它需要forKey:才能进行编译。但是,在objectForKey之类的其他方法之前我不需要任何东西。那是为什么?

这有效: NSUserDefaults.standardUserDefaults().setObject(myString, forKey: "myString") 这不是: NSUserDefaults.standardUserDefaults().setObject(myString, "myString")

这不需要xxx:在第一个参数前面: NSUserDefaults.standardUserDefaults().objectForKey("myString")

如何知道何时在参数前提供前缀xxx和冒号?除了依赖Xcode的自动完成或编译错误?

4 个答案:

答案 0 :(得分:1)

  

当我在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

不需要花很长时间就能掌握转变的想法。

答案 1 :(得分:1)

在swift函数中,不需要第一个参数标签(init方法除外)。因此,如果函数只有一个参数,则不需要指定参数标签。这就是为什么objectForKey:没有任何标签的情况。 setObject:forKey:需要两个参数,因此第二个参数需要一个标签。

  

默认情况下,第一个参数省略其外部名称,而   第二个和后续参数使用其本地名称作为他们的   外部名称。所有参数必须具有唯一的本地名称。虽然   多个参数可以具有相同的外部名称,   独特的外部名称有助于提高代码的可读性。

参考:Swift Documentation

答案 2 :(得分:1)

如果我理解你的问题, 通常,在将参数传递给函数时,不需要包含第一个参数名称。

{{1}}
  

默认情况下,第一个参数省略其外部名称,而   第二个和后续参数使用其本地名称作为他们的   外部名称。所有参数必须具有唯一的本地名称。虽然   多个参数可以具有相同的外部名称,   独特的外部名称有助于提高代码的可读性。

希望这会有所帮助。 你可以在这里读更多关于它的内容: Function Parameter Naming in Swift

答案 3 :(得分:0)

方法/功能签名

  • 开头括号前的所有内容
  • 逗号和冒号之间的所有内容(包括逗号和冒号)
总是需要