我是苹果Swift的新手。我正在尝试基于此tutorial构建一个演示应用。我发现该应用程序无法运行。经过几次试验并失败后,我发现如果我改变了代码行:
DB.beginTransaction
try{
MyObject myObj = DB.readMyObject();
myObj.setCurrentTime(System.currentTimeinMills());
MyObject myObj1 = DB.readMyObject();
myObj1.setCurrentTime(System.currentTimeinMills());
// myObj Edited.
// myObj1 Edited.
if(isPermittedToSave()){
DB.persist(myObj);
}
DB.persist(myObj1);
DB.commitTransaction();
} Catch(Exception e) {
DB.rollbackTransaction();
}
到
func textFieldDidEndEditing(textField: UITextField) {
我能够正确运行代码。
我想通过添加_作为其中一个参数来了解会发生什么。这两种方法都不会导致编译错误。但第一个确实给出了警告:
func textFieldDidEndEditing(_ textField: UITextField) {
由于第一个由apple教程给出,我不确定是否是一个错误。有人可以澄清我的怀疑吗?
答案 0 :(得分:2)
我认为您使用的是Swift 3.0。您正在阅读的教程可能是Swift 2.2或Swift 2.3版本。它只不过是我所观察到的语法变化。我甚至在昨天更新到Xcode 8.0时遇到了这种情况
答案 1 :(得分:1)
来自Swift 3第一个参数标签也是初始化器的标准。
Swift 3 Evolution
第一个参数声明将匹配第二个和后面的参数的现有行为。无论位置如何,所有参数都将表现均匀。这将在整个Swift编程语言中创建一个简单,一致的参数声明方法,并使方法和函数声明与已经使用此标准的初始化器同步。
例如
UIScrollView
将声明contentOffset.y
而非func foo(x: Int, y: Int)
。
现有的外部标签覆盖将继续适用于第一个参数。您在它支持的本地参数名称之前建立外部参数名称,用空格分隔。例如,
foo(x:y:)
详细了解SE-0046
中的第一个参数答案 2 :(得分:0)
如果您想要多个没有外部名称的参数,则必须使用“_”下划线字符作为其外部名称: