7

Swift 3 用の CocoaPod を作成しようとしています。CocoaPods はNimbleQuickを使用しており、これらのライブラリはまだ更新されていないため、リポジトリをフォークして変換しようとしています。

Nimble プロジェクトには、次の署名で呼び出される関数があります。

setTimer(start: DispatchTime, interval: UInt64, leeway: UInt64)

コンパイラは言うCannot invoke 'setTimer' with an argument list of type '(start: DispatchTime, interval: UInt64, leeway: UInt64)'

private let pollLeeway: UInt64 = NSEC_PER_MSEC
let interval = UInt64(pollInterval * Double(NSEC_PER_SEC))
asyncSource.setTimer(start: DispatchTime.now(), interval: interval, leeway: pollLeeway)

オートコンプリートは、すべての setTimer メソッドが非推奨であることを示していますが、私が発見したことから、そうすべきではありません。

代替品はありますか?

4

2 に答える 2

8

Swift 3.0 では、使用する必要があります

let timer = DispatchSource.makeTimerSource(flags: DispatchSource.TimerFlags(rawValue: UInt(0)), queue: DispatchQueue.global(qos: DispatchQoS.QoSClass.default))
    timer.scheduleRepeating(deadline: DispatchTime.init(uptimeNanoseconds: UInt64(100000)), interval: DispatchTimeInterval.seconds(1), leeway: DispatchTimeInterval.seconds(0))

代わりに、それは私にとってはうまくいきます

于 2016-09-28T06:46:02.140 に答える
0

Xcode 8 ベータ 1 では、そのメソッドのシグネチャは次のとおりです。

public func setTimer(start: DispatchTime, 
                  interval: DispatchTimeInterval, 
                    leeway: DispatchTimeInterval = default)

正しいパラメータDispatchTimeDispatchTimeIntervalパラメータをプラグインすると、コンパイルされ、非推奨の警告が表示されます。

'setTimer(start:leeway:)' is deprecated: replaced by 
instance method 'DispatchSourceTimer.scheduleOneshot(deadline:leeway:)'

いつものように、これらの Swift クラスとメソッドをコマンド + クリックすると、これらのメソッドが宣言されている Swift インターフェイス ソースに移動します。

于 2016-07-01T14:56:22.433 に答える