Xcode 9.3.1报错:Argument passed to call that takes no arguments 求助
解决Swift中随机生成流星坐标的报错问题
我懂你现在遇到的麻烦——给流星敌人生成随机X坐标时碰上个报错,Argument passed to call that takes no arguments这个提示其实已经把问题点出来了:你调用的random(min:max:)要么根本不存在,要么参数传递完全跑偏了。
在你用的Xcode 9.3.1(对应Swift 4.1)里,系统根本没有接收CGSize作为参数的random(min:max:)方法,而且你直接把CGSize对象塞给参数的做法本身也不对——随机数要的是数值范围,不是尺寸对象呀。
正确的实现方案
我猜你是想在某个数值范围内(比如屏幕宽度)生成随机X坐标,这里给你两种实用的解决办法:
方案1:直接用系统底层随机函数
不用额外写方法,直接通过arc4random_uniform转换为需要的CGFloat类型:
// 先定义你需要的范围,比如取屏幕宽度作为上限 let maxX = UIScreen.main.bounds.size.width // 生成0到maxX之间的随机X起始值和结束值 let randomXStart = CGFloat(arc4random_uniform(UInt32(maxX))) let randomXEnd = CGFloat(arc4random_uniform(UInt32(maxX)))
方案2:封装自定义随机数方法
如果需要频繁生成指定范围的随机数,封装一个通用方法会更方便:
// 自定义方法:生成min到max区间内的随机CGFloat值 func random(min: CGFloat, max: CGFloat) -> CGFloat { guard max > min else { return min } return CGFloat(arc4random()) / CGFloat(UInt32.max) * (max - min) + min } // 调用示例:生成0到屏幕宽度之间的随机X值 let randomXStart = random(min: 0, max: UIScreen.main.bounds.size.width) let randomXEnd = random(min: 0, max: UIScreen.main.bounds.size.width)
额外小提示
要是之后你升级到Xcode 10及以上(对应Swift 4.2+),就能用更简洁的系统原生API了:
let randomXStart = CGFloat.random(in: 0...UIScreen.main.bounds.size.width) let randomXEnd = CGFloat.random(in: 0...UIScreen.main.bounds.size.width)
不过当前你的Xcode版本不支持这个特性,还是用前面的方案更稳妥。
内容的提问来源于stack exchange,提问作者Moritz Sass
相关产品推荐
相关产品推荐

