web-dev-qa-db-ja.com

演算子「+」のあいまいな使用

そのため、Xcodeプロジェクトにこの小さなアルゴリズムがあり、機能しなくなりました。何を試しても、別の番号に番号を追加できないことを示しています。

注意:
ターゲットをiOS 7.0に変更する前は、すべてが完全に機能していました。
それがそれと関係があるかどうかはわかりませんが、iOS 8に切り替えても、エラーが発生し、ビルドが失敗しました。

コード:

var delayCounter = 100000

for loop in 0...loopNumber {
    let redDelay: NSTimeInterval = NSTimeInterval(arc4random_uniform(100000) + delayCounter) / 30000

    let blueDelay: NSTimeInterval = NSTimeInterval(arc4random_uniform(100000) + delayCounter) / 30000

    let yellowDelay: NSTimeInterval = NSTimeInterval(arc4random_uniform(100000) + delayCounter) / 30000

    let greenDelay: NSTimeInterval = NSTimeInterval(arc4random_uniform(100000) + delayCounter) / 30000
}
15
Garret Kaye

問題は、delayCounterIntであるのに、arc4random_uniformUInt32を返すことです。 delayCounterUInt32として宣言する必要があります。

var delayCounter: UInt32 = 100000
let redDelay = NSTimeInterval(arc4random_uniform(100000) + delayCounter) / 30000

または、arc4randomの結果をIntに変換します。

var delayCounter:Int = 100000
let redDelay = NSTimeInterval(Int(arc4random_uniform(100000)) + delayCounter) / 30000
17

関数arc4random_uniformUInt32を返しますが、delayCounterの型はIntです。 Swiftには+の演算子定義はありませんが、パラメーターとしてUInt32Intを取ります。したがって、Swiftは、この+演算子の出現をどう処理するかを知りません-それはambiguousです。

したがって、UInt32をパラメータとして使用するIntの既存のイニシャライザを使用して、最初にUInt32Intにキャストする必要があります。

let redDelay:    NSTimeInterval = NSTimeInterval(Int(arc4random_uniform(100000)) + delayCounter) / 30000
let blueDelay:   NSTimeInterval = NSTimeInterval(Int(arc4random_uniform(100000)) + delayCounter) / 30000
let yellowDelay: NSTimeInterval = NSTimeInterval(Int(arc4random_uniform(100000)) + delayCounter) / 30000
let greenDelay:  NSTimeInterval = NSTimeInterval(Int(arc4random_uniform(100000)) + delayCounter) / 30000

別のアプローチは、delayCounterUInt32として宣言することです。

let delayCounter: UInt32 = 100000
4
Marcus Rossel

_arc4random_uniform_関数は_UInt32_を返します。 Intに変換する必要があります

関数宣言
func arc4random_uniform(_: UInt32) -> UInt32

解決策:
let redDelay:NSTimeInterval = NSTimeInterval(Int(arc4random_uniform(100000))+ delayCounter)/ 30000

1