You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:04:58