Implicit conversion loses integer precision: 'long long' to 'NSInteger' (aka 'int')
16,973
Solution 1
It's really just a cast, with some range checking:
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;
Solution 2
you could try the conversion with NSNumber:
NSUInteger expectedSize = 0;
if (response.expectedContentLength) {
expectedSize = [NSNumber numberWithLongLong: response.expectedContentLength].unsignedIntValue;
}
Author by
Firdous
Updated on June 06, 2022Comments
-
Firdous almost 2 years
I am trying to assign a variable with type 'long long' to a type NSUInteger, What is the correct way to do that?
my code line:
expectedSize = response.expectedContentLength > 0 ? response.expectedContentLength : 0;
where
expectedSize
is of type NSUInteger and return type ofresponse.expectedContentLength
is of type 'long long
'. The variableresponse
is of typeNSURLResponse
.The compile error shown is:
Semantic Issue: Implicit conversion loses integer precision: 'long long' to 'NSUInteger' (aka 'unsigned int')