5

タイプ'longlong'の変数をタイプNSUIntegerに割り当てようとしていますが、これを行う正しい方法は何ですか?

私のコード行:

expectedSize = response.expectedContentLength > 0 ? response.expectedContentLength : 0;

ここで、expectedSizeはNSUInteger型であり、戻り型はresponse.expectedContentLength' long long'型です。変数responseのタイプはNSURLResponseです。

表示されるコンパイルエラーは次のとおりです。

セマンティックの問題:暗黙の変換で整数の精度が失われます:「longlong」から「NSUInteger」(別名「unsignedint」)

4

2 に答える 2

11

NSNumberを使用して変換を試すことができます。

  NSUInteger expectedSize = 0;
  if (response.expectedContentLength) {
    expectedSize = [NSNumber numberWithLongLong: response.expectedContentLength].unsignedIntValue;
  }
于 2012-05-16T10:30:46.547 に答える
5

これは実際には単なるキャストであり、範囲チェックがいくつかあります。

const long long expectedContentLength = response.expectedContentLength;
NSUInteger expectedSize = 0;

if (NSURLResponseUnknownLength == expectedContentLength) {
    assert(0 && "length not known - do something");
    return errval;
}
else if (expectedContentLength < 0) {
    assert(0 && "too little");
    return errval;
}
else if (expectedContentLength > NSUIntegerMax) {
    assert(0 && "too much");
    return errval;
}

// expectedContentLength can be represented as NSUInteger, so cast it:
expectedSize = (NSUInteger)expectedContentLength;
于 2012-05-16T10:46:04.323 に答える