代码之家  ›  专栏  ›  技术社区  ›  stevenpcurtis

swift从函数返回不同的类型

  •  0
  • stevenpcurtis  · 技术社区  · 6 年前

    完成一些旧的黑客等级挑战。

    其中一些似乎已损坏-例如,“公平口粮”为我们提供以下函数签名(注意:参数的大写不是我的错,它在此上下文中不可更改。

    func fairrations(b:[int])->int{
    //在此处输入代码应答代码
    }
    < /代码> 
    
    

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

    < Buff行情>

    INT/P> < /块引用>

    (即4)对于某些测试用例,以及

    < Buff行情>

    字符串

    < /块引用>

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

    所以我需要返回一个字符串,或者一个int,这取决于我的答案。我试图返回枚举,但我无法对hackrank测试进行任何更改-也无法返回任何

    <>:

    func fairrations(b:[int])->any{
    //在此处输入代码应答代码
    }
    < /代码> 
    
    

    不会工作,因为any不能隐式转换为字符串或int。

    这里是黑客等级问题:https://www.hackrank.com/challenges/fair-rations/problem

    为了澄清对Joakim Danielson的回应,问题描述意味着您可以将“否”输出到控制台,但事实并非如此(请参见下面的屏幕截图)。

    有没有可能有一个函数用swift同时返回一个字符串和一个int?

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

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

    利息

    (即4)对于某些测试用例,以及

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

    所以我需要返回一个字符串,或者一个int,这取决于我的答案。我试图返回枚举,但我无法对hackrank测试进行任何更改-也无法返回任何

    像:

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

    不会工作,因为any不能隐式转换为字符串或int。

    黑客等级问题出现在这里:https://www.hackerrank.com/challenges/fair-rations/problem

    为了澄清对Joakim Danielson的回应,问题描述意味着您可以将“否”输出到控制台,但事实并非如此(请参见下面的屏幕截图)。

    enter image description here

    有没有可能有一个函数用swift同时返回一个字符串和一个int?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Sweeper    6 年前

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

    我在hacker rank中将函数改为:

    func fairrations(b:[int])->字符串{
    返回“4”
    }
    < /代码> 
    
    

    它通过了这个测试:

    基本上,

    • 如果要返回一个整数,只需返回
    • 如果您想返回no,只需返回“no”

    以上两个值都是字符串。

    返回一个stringhere works because the test calls thestring(…)initialiser.如果您将一个字符串传递给它,它仍将创建与您传入的字符串相同的字符串。

    <>编辑:

    我试着编辑客户机代码,它工作了。您只需返回一个int?并执行以下操作:

    if let result=fairrations(b:b){
    filehandle.write(string(result).data(使用:.utf8)!)
    }否则{
    filehandle.write(“no”.data(使用:.utf8)!)
    }
    < /代码> 
    他是4号。

    我在hacker rank中将函数改为:

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

    它通过了这个测试:

    enter image description here

    基本上,

    • 如果要返回整数x只是回报x.description
    • 如果你想退货,不,只要退货"NO".

    以上两个值都是字符串。

    返回A字符串因为测试调用String(...)初始化器。如果您向它传递一个字符串,它仍然会创建与您传入的字符串相同的字符串。

    编辑:

    我试着编辑客户机代码,它工作了。你只需返回Int?这样做:

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