尝试使用基本的网络视图应用进行试验,我遇到了loadRequest
方法。使用swift的方法接受命名参数,但loadRequest不接受。只是想知道这个的推理?我发现这种不一致有点奇怪。
import UIKit
class ViewController: UIViewController {
@IBOutlet var webView: UIWebView
override func viewDidLoad() {
super.viewDidLoad()
let url = NSURL(string: "http://en.wikipedia.org")
let request = NSURLRequest(URL: url)
self.webView.loadRequest(request)
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
答案 0 :(得分:8)
类中独立函数和实例方法中的参数的处理方式不同。斯威夫特书中有这样的说法:
“Swift为方法中的第一个参数名称提供了一个局部参数 默认情况下命名,并提供第二个和后续参数名称 默认情况下为本地和外部参数名称。这个惯例 匹配您熟悉的典型命名和调用约定 与编写Objective-C方法,并制作表达方法 调用而无需限定参数名称。“
一个例子:
class Counter {
var count: Int = 0
func incrementBy(amount: Int, numberOfTimes: Int) {
count += amount * numberOfTimes
}
}
var myCounter = Counter()
myCounter.incrementBy(3, numberOfTimes: 4)
println(myCounter.count) // 12
答案 1 :(得分:1)
关于命名参数的默认行为,有一些复杂的规则。但是,它们都围绕着使Swift方法调用读取的方式与读取Objective-C方法调用的方式相同。每个参数有两种类型的名称:外部和内部。调用函数/ method / initializer时使用外部名称,内部名称仅在函数/ method / initializer的实现中使用。
使用初始化方法,“initWith”保持关闭状态,否则它是相同的。所以 - -[NSURL initWithString:]
变为NSURL(string:)
。
初始化程序在它们之前没有标识函数名称 函数和方法的括号。因此, 初始化程序参数的名称和类型特别有用 确定应该调用哪个初始化程序的重要作用。 因此,Swift为每个人提供一个自动外部名称 如果您不提供外部名称,则初始化程序中的参数 自己
所有其他方法默认为不命名第一个参数,但命名所有以下参数。
Swift在方法中给出了第一个参数名称本地参数 默认情况下命名,并提供第二个和后续参数名称 默认情况下为本地和外部参数名称。这个惯例 匹配您熟悉的典型命名和调用约定 与编写Objective-C方法,并制作表达方法 呼叫
功能调用应用了第3条规则。它们默认没有任何外部名称。
如果希望函数的用户在何时提供参数名称 他们调用您的函数,为每个函数定义一个外部参数名称 参数,除了本地参数名称。你写了一个 在它支持的本地参数名称之前的外部参数名称