2017-11-27 35 views
0

私はジョブを渡そうとしますか?(Int64)Intパラメータとして(私はそれが大きくないことを知っている)、迅速なコンパイラは、このエラーでプロンプト、私はキャストする方法を試したそれが、ない成功を収めなかった:タイプ 'Int64?'の値を変換できません。予想される引数の型 'Int'

Cannot convert value of type 'Int64?' to expected argument type 'Int' 

をマイコード:

Job.updateJobStatus(token: tok, jobId: job?.id, status:JobSatus.canceled) { (result, error) in 
     if result != nil 
     { 

     } 
     else if error != nil 
     { 

     } 
    } 
+1

試しましたか? https://stackoverflow.com/a/32793656/8236481 – Oxthor

+0

現時点でオプションの問題を無視して、なぜ2つのidデータ型が異なるのですか? – rmaddy

+1

関連:https://stackoverflow.com/questions/32793460/can-i-cast-int64-directly-into-int –

答えて

0

これはスイフト3 https://stackoverflow.com/a/32793656/8236481

に関連して、安全に別の整数型に変換するfailableイニシャライザを導入します。 init?(厳密に:)を使用すると、ある型を渡して別の型を初期化することができ、初期化が失敗した場合はnilを返します。返される値はオプションです。通常の方法でラップ解除する必要があります。

Int(exactly: yourInt64) 
0

あなたが解決するには、2つの問題があります。まず、jobをオプションとして扱う必要があります。次にjob.idjobIdパラメータと異なるデータ型にする必要があります。

あなたは、オプションの問題のために多くのオプションがあります。

guard let job = job else { return } 

Job.updateJobStatus(token: tok, jobId: Int(job.id), status:JobSatus.canceled) { (result, error) in 
    if let result = result { 
    } else if let error = error { 
    } 
} 

またはデフォルト値にフォールバックすることができます

Job.updateJobStatus(token: tok, jobId: Int(job?.id ?? 0), status:JobSatus.canceled) { (result, error) in 
    if let result = result { 
    } else if let error = error { 
    } 
} 

をあなたが本当にちょうどjobIdパラメータを持たせる必要があることに注意してくださいidプロパティと同じデータ型です。値が大きすぎて変換できない場合は、Int64からIntへの変換が失敗する可能性があります。

関連する問題