首页 文章

Swift从函数返回不同的类型

提问于
浏览
0

完成一些旧的HackerRank挑战 .

其中一些似乎被打破了 - 例如“公平的比例”给了我们以下的函数签名(注意:参数的资本不是我的错,在这种情况下它是不可改变的 .

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

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

国际

(即4)对于某些测试用例,和a

字符串

(即“否”)用于其他测试 .

所以我需要返回一个String或一个Int,这取决于我的答案 . 我试图返回枚举,但我不能对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 回答

  • 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)!)
    }
    

相关问题