您的位置:首页 > 移动开发 > Swift

swift-基础04-数字类型转换

2015-12-20 20:39 260 查看
在代码中,我们对所有通用的整数常量和变量使用 Int
类型,即使他们知道非负。

使用 Int
类型意味着整数常量和变量将易于复用,易于匹配整数面值的类型推测。

只有当必要的时候,才使用其他整数类型,

比如处理外部长度明确的数据,或者为了优化性能、内存占用等,或其他必要的优化。

使用显示长度的类型有助于发现值溢出和暗示正在使用的数据的性质。

不同整数类型的常量或变量存储的范围是不同的。

Int8 的范围是-128至127,而 UInt8
的范围是 0
至 255 。

swift提供了溢出检查

如果数字不在整数类型的范围内,编译器将报告一个错误:

let cannotBeNegative :UInt8 = -1

let tooBig:Int8 =
Int8.max + 1

var suibian = cannotBeNegative

var suibian1 = tooBig

suibian++

suibian1++

因为每个整数类型可以存储不同范围的值,所以,你必须根据不同的情况选择数值类型的转换。

这样可以防止隐式转换的错误,也可以表明类型转换的意图。

let twoThousand:
UInt16 = 2_000

let one: UInt8 =
1

let twoThousandAndOne = twoThousand +
UInt16(one)

print(twoThousandAndOne)

将一个特定的数字类型转换成另一个,要用这个数字来初始化成一个需要类型的新数字。

在上面的示例中,常量 twoThousand
是 UInt16
类型,然而常量 one
是 UInt8 类型。

它们不能直接加在一起,因为他们不是同一类型。

所以,这个例子中调用 UInt16(one)
来创建新的 one 的值,并使用这个新值来计算:

因为这2个数现在都是 UInt16
类型,所以可以相加。

输出常数(twoThousandAndOne)
也被推断为UInt16类型,因为它是两个UInt16类型值的总和。

SomeType(ofInitialValue)
是 Swift 调用构造器并传入初始值的默认方法。

在语言中,UInt16
有一个构造器,可以接受一个 UInt8
类型的值,

可以用 UInt8
来创建一个新的UInt16。

你并不能传入任意类型的值,只能传入UInt16构造器需要的类型的值。

整数和浮点数之间的转换必须显示的指定类型

通过常量 three
的值创建一个新类型 Double
的值,

所以,加号两边是相同的类型。如果不转换,是不允许相加的。编译器会报错误

let three = 3

let xiaoshu =
1.1415

let pi = Double(three) + xiaoshu

print(pi)

let intpi = three +
Int(xiaoshu)

print(intpi)

结合数字常量和变量的规则不同于字面量的规则。

字面量3可以直接和字面量1.1415相加,因为数字字面量本身没有明确的类型。

在编译器求值的时候会推测类型
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: