Swift 4中的主函数

目的

介绍在Swift 4中使用函数的所有有用信息。希望到本文结尾,您将对在Swift 4中使用函数有深刻的了解,然后将其优雅地应用到您的项目中。 我给出的例子将是相关的。 基本上使用我们已经知道的东西来解释一些新东西。

我会尽力而为。 清晰,简洁,实用。

目前为止就这样了。 打开Playground,让我们直接潜水。

什么是功能?

函数是执行特定任务的独立代码块。

– 苹果

我们定义函数来执行某些任务,稍后可以调用。 就像具有已定义功能的“打开”按钮的交流遥控器一样。 我们可以通过按“开”按钮来调用该已定义的函数,AC会尝试冻结您。

有史以来最简单的功能

让我们从零地面开始,然后逐步发展。 这样我们就不会错过任何一件事情。 在我下面是一个空函数,请检查一下:

  func emptyFunction(){ 
  } 

我可以在我的代码中这样调用:

  emptyFunction() 

目前,它绝对不执行任何操作。

这样,我们就可以剖析函数并了解Swift中创建函数的每个细节。 与iOS开发人员,代码访问员和书面交流时,下一部分特别有用。

要“命令”我们刚刚对另一个人所做的事情,可以说定义一个称为“空函数”的函数。

func→定义一个功能

emptyFunction→函数名称

现在可以使用

如今,我们中的很多人都沉迷于皇家冲突。 也许只是我。 无论如何,让我们从Clash Royale的场景中举例说明。 我们将定义一个函数,对其进行调用,然后逐步学习一些东西。 让我们来看看它的作用。

限定

尝试看看是否可以根据我收到的描述提供一个功能。 定义一个名为“ battle with”的函数,该函数带有两个参数。 第一个参数是字符串类型的播放器名称。 第二个参数是我们要使用的战斗甲板。 如果您没有获得参数部分,请不要担心,因为我尚未向您介绍参数,但是在本文中将进行详细介绍。

这是函数编写方式的示例:

  func BattleWith(playerName名称:String,BattleDeck卡座:Int = 2)->字符串{ 
return(“使用甲板编号\(甲板)的战斗\(名称)。”)
}

不要惊慌。 一切都会被解释。

好吧,让我们剖析上面的函数,看看这些东西叫什么:

()→括号

playerName→参数标签

名称:字符串→字符串值的参数

BattleDeck→参数标签

卡座:Int→int值参数

卡座:Int = 2→卡座参数的默认值为2

->字符串→返回字符串值

在了解如何调用之后,我们将进一步解释这些操作。 我认为,如果从定义和调用的角度来看,它都会更有意义。 还记得将这些代码放在Playground中并自己进行测试。 玩吧。

呼叫

您可以通过许多不同的方式调用函数。 以下是您可能需要如何处理的两个示例:

  BattleWith(playerName:“ BarbaricBeast_26”) 
//返回
//“使用2号牌的战斗BarbaricBeast_26”
  BattleWith(玩家名:“绿巨人霍根”,battleDeck:1) 
//返回
//“使用第1号牌组的Hulk Hogan战斗”

第一个和第二个函数调用之间的主要区别是BattleDeck参数。 当我们与BarbaricBeast_26战斗时,我们使用我们的默认套牌(2)。 我们不需要显式设置它,因为该函数已将deck参数的默认值设置为2。

但是,假设我们要与“绿巨人”霍根作战,我们可能希望将其切换一点并使用甲板编号1。为什么? 好吧,因为他是一位有钱的母亲。 他还看起来像是那个Hulkamania头带的铁杆玩家。 因此,如果我们想赢,我们将必须大怒地辞职。 因此,最好在第1战斗甲板上存放大量火箭,火球和核武器。 我们会把他关掉的。 即使我们不这样做,至少我们还是把他拖了。 这就是战斗甲板上第一个人的重点。

输入输出参数

好吧,让我们扩展一下在Clash Royale中退出Hulk Hogan的愤怒。 屁股! 在此之前,我们击败了BarbaricBeast_26。 结果,我们获得了一堆好金币。 因此,让我们在这种情况下展示in-out参数,并逐步了解一些有用的内容。

限定

我们将定义一个函数,使我们可以向黄金库存中添加黄金。 自从我们的dada借给我们一千金条以来,我们的初始黄金数量将为1000。

  var myGoldInventory = 1000 
  func addGoldTo(_ gold:inout Int){ 
让增量= 100
金+ =增量
}

让我们看看我们还有什么要说的:

var→变量

_→省略参数标签

输入→输入参数

让→不变

您可能遇到的第一个“嗯”是下划线。 基本上,如果您不想看到参数的参数标签,请写一个下划线,而不要使用显式参数。

这是我刚才解释的一些变体:

  //省略参数标签的一些变体 
func exampleA(_第一:字符串,_第二:字符串){}
exampleA(“第一”,“第二”)
  func exampleB(第一:字符串,_第二:字符串){} 
exampleB(first:“ first”,“ second”)
  func exampleC(_第一个:字符串,第二个:字符串){} 
exampleC(“ first”,second:“ second”)

第二个“ hmm”是输入输出参数。 为了解释它的作用,我想让您想象自己要执行以下操作:取一只白兔子,将白兔子浸入一罐羽衣甘蓝冰沙中,然后从羽衣甘蓝冰沙中取出兔子。 现在兔子是绿色的。 基本上,这就是输入输出参数的全部含义。 这是您要放入函数中并对其进行修改的内容。 因此,名称为“由内而外”。

如果那没有足够的意义,请继续阅读并了解我们如何使用in-out参数调用函数。

呼叫

我们将在黄金库存上调用addGoldTo()。

  //呼叫 
//注意:起始黄金数量= 1000
  addGoldTo(&myGoldInventory)// 1100 
  addGoldTo(&myGoldInventory)// 1200 
  addGoldTo(&myGoldInventory)// 1300 

新鲜玩意:

&→连字号

我们最像以前一样调用该函数。 现在唯一的区别是,我们在变量前面放置了一个&符号,以表明我们将修改接下来要使用的变量。 一旦将“与”号设置到位,就可以传入变量。

如此说来,我们连续赢得了三场比赛,而每当我们获胜时,作为奖励,我们将获得100金币的增量。 结果,我们将从三场胜利的游戏中累积了300金,这使我们的库存总额达到了1300金。

我们打仗,我们赢了,我们得到了更多的金子。

在函数内部运行函数

在我们收集金币的同时,绿巨人霍根(Holk Hogan)也在皇家部落(Clash Royale)训练自己的屁股。 幸运的是,我们将制定一个计划来击败他的屁股。 展示“嵌套功能”的绝佳时机。

首先,我们将定义一些我们想做的事情,以最大程度地提高百搭屁股的机会

  func eatHealthy(food:String ...){} 
  func DrinkCoffee(){} 
  func kickass(){} 

新鲜玩意:

…→可变参数

可变参数接受零个或多个指定类型的值。 在本例中,我们将字符串设置为指定的类型。 另请注意,无论出于何种原因,每个函数最多最多允许一个可变参数。

您可能还注意到,food参数没有参数标签。 请查看下面的代码,以澄清它们。

  func anotherFunc(param1:字符串,param2:字符串){} 
anotherFunc(param1:“字符串”,param2:“字符串”)
  func andAnotherFunc(_ param1:字符串,_ param2:字符串){} 
andAnotherFunc(“ something”,“ something”)

没有参数标签与省略参数标签不同。 如果在定义函数时省略了参数标签,则该函数将默认一个与参数标签同名的参数标签。

大。 现在让我们继续看一下嵌套函数的外观。

  func runPlan(){ 
eatHealthy(食物:“白薯”,“鸡胸肉”,“煮鸡蛋”)
喝咖啡()
踢屁股()
}
  runPlan() 

所以基本上我们只是在函数内调用函数。 现在您可能想知道:“该死。 什么时候该使用它?”

好的,下面是带有注释的相同示例,以显示更实际的示例:

  func runPlan(){ 
//如果早上
eatHealthy(食物:“白薯”,“鸡胸肉”,“煮鸡蛋”)

//否则是下午
喝咖啡()

//其他
踢屁股()
}
  runPlan() 

您可以像私人教练一样考虑此功能。

早上6点:吃鸡蛋

上午12点:喝咖啡

下午6点:踢屁股

当然,我们必须传递一个表示一天中时间的值。 为了避免聚类并一次引入许多想法,我们将使用注释来有效地阐明要点。

时间参数告诉使用我们根据计划需要做的事情。 早上健康饮食。 下午补充咖啡因。 踢屁股一天。 听起来像是个计划。

在功能中

想象一下,有一枪可以加载不同的子弹,以产生不同的命中效果。 第一种子弹确实会对我们造成伤害。 第二种可以治愈我们的目标。 我们的目标是一个机器人。 吃iPhone已有悠久的历史。 当心,不要说我没有警告过你。

限定

  func Sh​​oot(_ target:inout Int,onHitEffect:(Int)-> Int){ 
目标= onHitEffect(目标)
}

(Int)-> Int→函数类型参数,该参数接受一个int并返回一个int

现在很酷,我们有了主要功能。 让我们定义两个可以使用的函数。

 函数伤害(_ hp:Int)-> Int { 
回复马力-20
}
  func heal(_ hp:Int)-> Int { 
生命值+ 20
}

注意参数 刚创建的两个函数的值类型和返回类型与Shoot函数的参数完全相同。 除非我们使用泛型,否则它们的类型必须完全相同。

呼叫

现在,我们将坏机器人定义为凡人。 因此,作为变量。 然后射出两颗会损坏它的子弹。 每个子弹会造成20点以上的伤害,这是我们上面的伤害功能所设定的。 不良机器人的HP在第一次射击后为80,第二次射击后为60。

现在因为我们是好人,好人至少有点同情。 让我们发射一颗能治愈机器人的子弹。 然后,运行此程序将机器人恢复至80 HP。

  var badRobot = 100 
  Shoot(&badRobot,onHitEffect:伤害)// badRobot = 80 
  Shoot(&badRobot,onHitEffect:伤害)// badRobot = 60 
  Shoot(&badRobot,onHitEffect:治愈)// badRobot = 80