最新消息:服务器现已从linode换到fzhost.net,且主题已从retina 0.2换为大前端D8

[已解决]swift代码出错:Cannot convert value of type CGFloat to expected argument type Float

Swift crifan 27浏览 0评论
[背景]
折腾:
[已解决]Swift代码出错:Binary operator / cannot be applied to operands of type CGFloat and Int
期间,swift代码:
        let count:Int = self.viewControllers.count
        let rect:CGRect = CGRectMake(0, 0, floorf(self.view.bounds.size.width / CGFloat(count)), self.tabBarHeight)
出错:
Cannot convert value of type ‘CGFloat’ to expected argument type ‘Float’
如图:
Cannot convert value of type CGFloat to expected argument type Float
[解决过程]
1.自己看代码,突然发现,好像是:
对于函数floorf,传入的参数:
self.view.bounds.size.width / CGFloat(count)
然后是CFGloat
而其函数本事期望是Float?
2.去搜:
swift floorf
参考:
3.自己去看floor的定义:
public func floorf(_: Float) -> Float
floorf definition in darwin
很明显,我前面的猜测是对的。
所以,接着就是:
想办法,搞清楚:
Swift中如何把CGFloat转换为Float
4.去试了试:
let rect:CGRect=CGRectMake(0,0,floorf(Float(self.view.bounds.size.width/CGFloat(count))),self.tabBarHeight)

结果还是不行。

5.搜:
swift convert CGFloat to Float
参考:
去试试floor
let rect:CGRect = CGRectMake(0, 0, floor(self.view.bounds.size.width / CGFloat(count)), self.tabBarHeight)

结果就可以了,没有错误了

[总结]
此处代码报错是因为floorf的参数是Float的,但是此处传入的是CGFloat。
解决办法是:
把:
CGRectMake(0, 0, floorf(self.view.bounds.size.width / CGFloat(count)), self.tabBarHeight)

改为:

CGRectMake(0,0,floor(self.view.bounds.size.width/CGFloat(count)),self.tabBarHeight)

即可。

对于floor,去看定义:
是属于CoreGraphics的:
@warn_unused_result
public func floor(x: CGFloat) -> CGFloat

如图:

floor pass in and return out all cgfloat

传入和返回的都是CGFloat。

转载请注明:在路上 » [已解决]swift代码出错:Cannot convert value of type CGFloat to expected argument type Float

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
55 queries in 0.356 seconds, using 12.63MB memory