函数返回有关重载运算符的错误

Posted

技术标签:

【中文标题】函数返回有关重载运算符的错误【英文标题】:Functions returns error about overloading operator 【发布时间】:2014-06-05 23:30:30 【问题描述】:

当我将参数 alpha 分配给函数实现时,此代码显示错误找不到接受提供的参数的 '/' 的重载,但如果我将 alpha 设置为 1.0,错误就会消失。

这可能是什么原因造成的?

import Foundation
import UIKit

extension UIColor 

  enum AlphaLevel :CGFloat 
    case Empty  = 0.0
    case Low    = 0.25
    case Half   = 0.5
    case High   = 0.75
    case Full   = 1.0
  

  class func hazeColor(alpha :AlphaLevel = .Full) -> UIColor! 
    return UIColor(red: 230/255.0, green: 235/255.0, blue: 245/255.0, alpha: alpha)
  


我正在征集我尝试过的尝试:

class func hazeColor(alpha :AlphaLevel = .Full) -> UIColor! 
    return UIColor(red: Float(230)/255.0, green: Float(235)/255.0, blue: Float(245)/255.0, alpha: alpha)
  

【问题讨论】:

浮点转换似乎不是问题,但如果我删除所有“/”,我会收到错误:找不到接受提供的“init”的重载论据 【参考方案1】:

使用230/255.0就可以了,因为数字的类型会在计算后确定。如果将这两个数字分配给变量(或常数),则必须在计算之前对其进行转换。所以230/255.0没有问题。 (事实上​​,CGFloatDouble..不是 Float

UIColor 的扩展中定义AlphaLevel 枚举对我来说似乎是一个致命的错误。如果我这样做,Swift 会崩溃(尽管它应该是可能的)。总之……

您的代码中的问题是您传递给hazeColor 方法的alphaAlphaLevel 的枚举,而不是CGFloat,因此类型检查失败。只需将UIColor(red: 230/255.0, green: 235/255.0, blue: 245/255.0, alpha: alpha)修改为UIColor(red: 230/255.0, green: 235/255.0, blue: 245/255.0, alpha: alpha.toRaw())即可。

【讨论】:

以上是关于函数返回有关重载运算符的错误的主要内容,如果未能解决你的问题,请参考以下文章

类和对象—4

运算符重载模函数

重载运算

重载运算

C++运算符重载

c++中为啥赋值运算符重载返回类型是引用