Swift:为啥函数有参数和返回值类型?

Posted

技术标签:

【中文标题】Swift:为啥函数有参数和返回值类型?【英文标题】:Swift: Why to functions have parameters and return value types?Swift:为什么函数有参数和返回值类型? 【发布时间】:2016-06-03 10:43:58 【问题描述】:

在转向更高级的功能之前,我正在填补我现有的 Swift 编程语言技能方面的一些空白。

我检查了 Apples...“Swift Programming Language”指南和 Google 搜索显示了很多关于使用参数的规则的信息,但我正在寻找整体的 Why ,而不是 How...

问题:

为什么 Swift 中的函数需要有参数和返回值类型?

(我不是在问参数名称等,而是关于“为什么”的更高级别(一般)问题)

我在 Swift 中使用简单的 C 风格函数制作了许多程序,不需要参数或返回值,因为我知道这些函数应该为我做什么,所以效果很好。

简单例如

func printName() 
print("John")

但是,也有一些“例外”,例如一些内置的 Swift 函数。 比如……

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 返回颜色.count

等等。用于表格视图或集合视图。

所以我看到在函数中使用参数+返回值(类型)的唯一原因是确保只输入和输出特定类型的数据。

换句话说,它是一种避免意外结果的方法。因此,它的行为几乎就像一个 Switch 语句,如果满足特定条件 - 将发生特定输出......(在函数中......“一个动作”)。

我的理解是否正确,试图理解为什么/在哪里需要使用参数和/或返回值类型与函数?还是有其他实际原因?如果可以,可以举个例子吗?

非常感谢!!!!

【问题讨论】:

所以你的问题是“为什么我们需要说明传递给函数的数据类型是什么”?这适用于所有 typed 语言,而不仅仅是 Swift。 【参考方案1】:

如果您不使用参数,那么您就只能使用范围内可见的内容。

如果您的函数位于 ViewController 中,则该 VC 中的所有属性,以及全局范围变量(可怕) 如果您的函数在全局范围内,则只能使用全局范围符号(再次可怕)

你确实想使用参数传递东西。这样您就可以:

自动检查类型(编译正在为你做) 检查可选性 检查值范围 使用单元测试测试您的函数。如果您使用全局符号,您将被绑定到该符号,无法更改它们 更少的维护:您的功能之外的更改不会影响您

此外,具有明确的返回类型有助于其他开发人员和您未来的自己理解从该函数返回的内容:元组?可选数组?一个号码?此外,定义输出类型有助于您测试函数。

仅使用全局变量和过程(处理这些全局变量的代码块)可以在小范围内工作。这是用于 FORTRAN、BASIC、COBOL 等语言的旧方法......当您的项目发展壮大时,您需要将代码的一部分与另一部分隔离开来。为此:

使用函数和函数方法 使用 OOP

【讨论】:

谢谢迭戈。这有帮助。这就是我要找的。 “为什么”的概述。【参考方案2】:

让我们想象一个sum 函数

func sum(a: Int, b:Int) -> Int 
    return a + b

如果我们删除参数类型会发生什么

func sum(a, b) -> Int 
    return a + b // what?

当然编译器不允许这样做,但让我们试着想象一下。

现在ab 可以是任何东西(例如StringUIImage)。我们如何编写代码来求和 2 things 并得到 Int

另一个测试,我们去掉返回类型

func sum(a:Int, b:Int) -> ??? 
    return a + b

现在让我们尝试调用我们的疯狂函数

let tot: Int = sum(1, b: 2)

但是由于sum 可以返回任何类型的值,我们如何将结果放入Int 常量中?

【讨论】:

感谢您的思路。非常感激。!!我正在从“定性”方法中寻找

以上是关于Swift:为啥函数有参数和返回值类型?的主要内容,如果未能解决你的问题,请参考以下文章

Swift6-函数

Swift基础语法学习总结二

Swift初见Swift函数

Swift基础语法

Swift 5.X——函数

求助关于 swift 数组,NSArray 和 闭包 的问题