func say(name:String, msg:String) {
    println("\(name) say \(msg)")
}

say("Henry","Hi,Swift")  <---- error because missing argument label 'msg' in call

我需要使用

   say("Henry",msg:"Hi,Swift")

为什么?如果我在func中输入了两个以上的变量,那么当我调用这个func时,我需要写变量名而不是第一个变量

推荐答案

一个可能的原因是它实际上是一种方法.方法非常狡猾,它们看起来就像常规函数,但它们的行为方式不同,让我们看看这一点:

func funFunction(someArg: Int, someOtherArg: Int) {
    println("funFunction: \(someArg) : \(someOtherArg)")
}

// No external parameter
funFunction(1, 4)

func externalParamFunction(externalOne internalOne: Int, externalTwo internalTwo: Int) {
    println("externalParamFunction: \(internalOne) : \(internalTwo)")
}

// Requires external parameters
externalParamFunction(externalOne: 1, externalTwo: 4)

func externalInternalShared(#paramOne: Int, #paramTwo: Int) {
    println("externalInternalShared: \(paramOne) : \(paramTwo)")
}

// The '#' basically says, you want your internal and external names to be the same

// Note that there's been an update in Swift 2 and the above function would have to be written as:

func externalInternalShared(paramOne paramOne: Int, #paramTwo: Int) {
    print("externalInternalShared: \(paramOne) : \(paramTwo)")
}

externalInternalShared(paramOne: 1, paramTwo: 4)

现在有趣的是,在类中声明一个函数,它不再是一个函数……这是一种方法

class SomeClass {
    func someClassFunctionWithParamOne(paramOne: Int, paramTwo: Int) {
        println("someClassFunction: \(paramOne) : \(paramTwo)")
    }
}

var someInstance = SomeClass()
someInstance.someClassFunctionWithParamOne(1, paramTwo: 4)

这是方法行为设计的一部分.

苹果文档:

具体地说,默认情况下,SWIFT为方法中的第一个参数名称指定本地参数名称,默认情况下为第二个及后续参数名称指定本地参数名称和外部参数名称.此约定与您在编写Objective-C方法时熟悉的典型命名和调用约定相匹配,并且无需限定参数名称即可实现富有表现力的方法调用.

请注意自动完成: 在此处输入图像描述

Ios相关问答推荐

Swift:从字符串目录获取带有参数的本地化字符串

iOS中的分段拾取器—手柄点击已 Select 的项目

Swift locationManager.requestWhenInUseAuthorization() 不提示用户

多协议和类继承混乱,Swift

@MainActor 类的扩展是主要演员吗?

在 SwiftUI 中放置全局 NavigationPath 的位置

Xcode14 启动时崩溃:dyld:库未加载:/usr/lib/swift/libswiftCoreGraphics.dylib

SwiftUI:如何为 ScrollView 制作可拉伸(灵活)的粘性标题?

Swiftui为什么在点击第二行之前背景不起作用

.onChange(of: ) 一次用于多个 @State 属性?

如何在 Swift 3 中根据 UIImage 的大小/比率调整 UIImageView 的大小?

改变 UIView 位置的简单方法?

无法验证客户端 3000

以编程方式获取故事板 ID?

如何用 Swift 圆化 UILabel 的边缘

正确的领域使用模式/最佳实践?

iOS在应用程序中下载并保存图像

两个数字之间的动画UILabel文本?

Xcode中的终端窗口?

将 struct 保存到 UserDefaults