swift函数重载调用问题

[复制链接]
257 3
代码如下,最近在学老头子的swift课程,照代码打,但是Xcode提示我
Ambiguous reference to member 'evaluate'。下面的代码已经把其中一个设置为private,为什么还会出现这种情况,不是应该默认调用我的public函数吗?
private func evaluate(ops:[Op])->(result:Double?,remainingOps:[Op]){

if !ops.isEmpty{
var remainingOps=ops
let op = remainingOps.removeLast()
switch op {
case .Operand(let operand):
return (operand,remainingOps)
//如果是操作符就进行计算
case .UnaryOperation(_, let operation):
let operandEvaluation = evaluate(remainingOps)
//这个时候符号已经被移除,result是第二个操作数
if let operand=operandEvaluation.result{
return (operation(operand),operandEvaluation.remainingOps)
}
case .BinaryOperation(_, let operation):
let op1Evaluation = evaluate(remainingOps)
if let operand1=op1Evaluation.result{
let op2Evaluation = evaluate(op1Evaluation.remainingOps)
if let operand2 = op2Evaluation.result{
return(operation(operand1,operand2),op2Evaluation.remainingOps)
}
}


}
}
return (nil,ops)
}

func evaluate() -> Double? {
let (result , _)=evaluate(opStack)
return result
}

func pushOperand(operand:Double){
opStack.append(Op.Operand(operand))
return evaluate()
}

func performOperation(symbol:String){
if let operation = knowOps[String]{
opStack.append(operation)
}
return evaluate()
}

举报 使用道具

回复

3 个评论

teechi  新手上路  发表于 2019-3-9 13:54:57  | 显示全部楼层
代码如下,最近在学老头子的swift课程,照代码打,但是Xcode提示我
Ambiguous reference to member 'evaluate'。下面的代码已经把其中一个设置为private,为什么还会出现这种情况,不是应该默认调用我的public函数吗?
private func evaluate(ops:[Op])->(result:Double?,remainingOps:[Op]){
        
        if !ops.isEmpty{
            var remainingOps=ops
            let op = remainingOps.removeLast()
            switch op {
            case .Operand(let operand):
                return (operand,remainingOps)
                //如果是操作符就进行计算
            case .UnaryOperation(_, let operation):
                let operandEvaluation = evaluate(remainingOps)
                //这个时候符号已经被移除,result是第二个操作数
                if let operand=operandEvaluation.result{
                    return (operation(operand),operandEvaluation.remainingOps)
                }
            case .BinaryOperation(_, let operation):
                let op1Evaluation = evaluate(remainingOps)
                if let operand1=op1Evaluation.result{
                    let op2Evaluation = evaluate(op1Evaluation.remainingOps)
                    if let operand2 = op2Evaluation.result{
                        return(operation(operand1,operand2),op2Evaluation.remainingOps)
                    }
                }
               
               
            }
        }
        return (nil,ops)
    }
   
    func evaluate() -> Double? {
        let (result , _)=evaluate(opStack)
        return result
    }
   
    func pushOperand(operand:Double){
        opStack.append(Op.Operand(operand))
        return evaluate()
    }
   
    func performOperation(symbol:String){
        if let operation = knowOps[String]{
            opStack.append(operation)
        }
        return evaluate()
    }

举报 使用道具

回复
joec  新手上路  发表于 2019-3-9 15:15:49  | 显示全部楼层
最下面调用evaluate()的时候是无参数的,不是应该匹配无参的evaluate版本吗

举报 使用道具

回复
mamayuyu  注册会员  发表于 2019-3-9 16:02:45  | 显示全部楼层
太粗心大意了,原来是自己后面的函数没有写返回类型

举报 使用道具

回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

ios.irunthink.com
搜索
热搜: iOS swift 下拉刷新

图文热点

更多

开发教程

更多

客服中心

400-800 周一至周日 9:30-17:30 仅收市话费

关注我们

  • 微信扫描
  • 关注微信
关于我们
关于我们
友情链接
联系我们
帮助中心
精贴推荐
源码上传
注册登录
服务支持
资源下载
关注我们
官方微博
官方空间
快速回复 返回顶部 返回列表