Swift说函数是由参数类型和返回类型的序列组成的类型。但是初始化器允许具有相同的类型,但具有不同的参数本地/外部名称。从类型的角度来看,它如何区分这一点。还是由于不打算将其传递给他人,所以将其与功能完全不同吗?

有人可以帮我理解吗?

class Test {

    init(param1: Int) {

    }

    init(param2: Int) {
        //This is good
    }

    func testMethod(param1: Int) {

    }

    func testMethod(param2: Int) {
        //Compile error
    }
}

最佳答案

默认情况下,方法的第一个参数不属于方法签名。

func testMethod(param1: Int) {}
func testMethod(param2: Int) {}

// are both called like this:
.testMethod(0)
.testMethod(0)

但是您可以使第一个参数明确,就像它是初始化程序的默认值一样:
func testMethod(param1 param1: Int) {}
func testMethod(param2 param2: Int) {}

// are called like this:
.testMethod(param1: 0)
.testMethod(param2: 0)

根据Swift约定,第一个参数名称应是初始方法名称的一部分,如下所示:
func testMethodParam1(param1: Int) {}
func testMethodParam2(param2: Int) {}

关于ios - 相同数据类型的快速重载初始化程序如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33973554/

10-09 12:52