Swift方法参数,并不总是命名?

时间:2014-06-13 03:04:00

标签: swift

尝试使用基本的网络视图应用进行试验,我遇到了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.
    }


}

2 个答案:

答案 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条规则。它们默认没有任何外部名称。

  

如果希望函数的用户在何时提供参数名称   他们调用您的函数,为每个函数定义一个外部参数名称   参数,除了本地参数名称。你写了一个   在它支持的本地参数名称之前的外部参数名称