Swift从函数返回不同的类型

时间:2018-11-20 06:18:26

标签: swift

完成一些旧的HackerRank挑战。

其中一些似乎已损坏-例如,“ Fair Rations”为我们提供了以下函数签名(注意:参数的大写不是我的错,在这种情况下不能更改。

func fairRations(B: [Int]) -> Int {
// Enter code answer code here
    }

现在问题测试用例(这里的问题的细节并不重要)要求我们返回

  

Int

(即4)(针对某些测试用例)和

  

字符串

(即“否”)进行其他测试。

所以我需要根据我的回答返回一个字符串或一个整数。我试图返回一个枚举,但是我无法对HackerRank测试进行任何更改-也返回了任何

喜欢:

func fairRations(B: [Int]) -> Any {
// Enter code answer code here
    }

不起作用,因为Any不能隐式转换为String或Int。

HackerRank问题在这里:https://www.hackerrank.com/challenges/fair-rations/problem

为澄清Joakim Danielson的问题,问题描述意味着您可以向控制台输出“ NO”,但这实际上并非如此(请参见下面的屏幕截图)。

enter image description here

在Swift中是否有可能同时返回String和Int的函数?

1 个答案:

答案 0 :(得分:1)

只需更改函数以返回String。请记住,整数也可以表示为字符串。字符串“ 4”代表数字4。

我将此功能更改为黑客等级:

func fairRations(B: [Int]) -> String {
    return "4"
}

它通过了此测试:

enter image description here

基本上

  • 如果要返回整数x,只需返回x.description
  • 如果要返回NO,只需返回"NO"

以上两个值都是字符串。

在这里返回String是可行的,因为测试调用了String(...)初始化程序。而且,如果您向该字符串传递一个字符串,它仍会创建您传入的字符串。

编辑:

我尝试编辑客户端代码,它可以工作。您可以只返回Int?并执行以下操作:

if let result = fairRations(B: B) {
    fileHandle.write(String(result).data(using: .utf8)!)
} else {
    fileHandle.write("NO".data(using: .utf8)!)
}