Swift3-03 基础类型

swift 是一个强类型语言:

var x = 1

x = "abc" //会报错(Cannot assign value of type "String" to type "int")

显示声明变量

let s:String = "abc"

一次声明多个变量,

var y, z, d:Double
var x = 1, y = 2, z = 3

Int

var aInt: Int = 20 //整型的存储空间是有限的,根据不同的计算机来定。有最大最小值
Int.max
Int.min

var aUInt:UInt = 200  //无法存储负数,最大值是 Int 的两倍+1
UInt.max
UInt.min

Int 的类型
!intType

小知识 如果是一个比较大的数值,可以使用下划线对数字进行分割

let bigNum = 1_000_000_000_00232

C8A54525-8DE7-4EC3-8665-89146D67C0CF

Float Double

浮点数 float Double 区别
C8A54525-8DE7-4EC3-8665-89146D67C0CF

//上面的数字加下划线 亦可以用在小数中。

var aFloat = 1_000_000.000_0001  

swift 是一个强制类型语言,把浮点数赋值给整型是肯定会报错的。除非对浮点数进行转换才行。

Boolean

let aTrue:Bool = true
let aFalse = false

if aTrue{
    print("True")
}else if(1 == 1){
    print("1 == 1")
}
else{
    print("False")
}

if 判断语句 只能使用 Bool 类型判断,否则会报错

Tuple 元组就是将多个不同的值集合在一个数据中。可以有任意多个值,多个不同的数据类型

var point = (1 , 1)
var httpResponse = (401, "未授权")

// 显式指定元组类型
var point2:(Int, Int, Int) = (2, 3, 4)

var httpResponse2:(Int, String) = (200, "OK")

//取值
httpResponse.0
httpResponse.1

//解包
let (x, y) = httpResponse2
print(x, y)

//给分量加一个名字。
let point3 = (x: 3, y :4)
point3.x
point3.y

let point4:(x: Int, y: Int) =(2, 3)
point4.x
point4.y

let point5 = (10,23)
let (z, _) = point5 //若不需要解包某一个数据,可以用下划线_忽略一些值
z

String 使用双引号引起来的一段文本。

字符串基本用法

//声明一个字符串
var str: String = "swift"
let str1 = String("abdd")

//空字符串
var emptyStr = ""
var emptystr1 = String()

str.isEmpty //字符串判空

let a = "abc"
str + a 

str += a

str1 += a //错误 常量不能被改变

//字符串插值  字符串插值是一种全新的构建字符串的方式,可以在其中包含常量、变量、字面量和表达式。您插入的字符串字面量的每一项都被包裹在以反斜线为前缀的圆括号中:
let name  = "jack"
let age = 20
let s = "My name is \(name), age is \(age)"

// \是转义字符  \t 是制表符  \n 是换行符
let s2 = "\\" //输出转义字符
print(s2)

字符串遍历

var str = "hello. swift"

for c in str.characters{
    print(c)
}

字符

let mark:Character = "!" //字符

str + String(mark) //不改变 str 

str.append(mark) //改变 str 值

在 swift 中一个中文字符和表情符都可以是一个字符(其他语言中可能需要多个字符才能标识)

let dog:Character = "🐶"
let chinessLetter :Character = "程"
let coolguy: Character = "\u{1F60E}"

字符串长度 :swift 更倾向于人类理解,而不是机器理解。 但是这会导致 swift 处理大批量字符串的时候速度比较慢

var strLetters = "abcdef\u{1F60E}"
strLetters.characters.count //长度计算 为7
strLetters = "中国"
strLetters.characters.count //长度计算 为2

var cafe = "café"  //字符串长度是多少?

cafe = "cafe\u{0301}" //字符串长度是多少?

如何索引获取字符串中的字符 //这个处理几个版本变化很大

var str = "hello, swift" 
let startIndex =  str.index(str.startIndex, offsetBy: 2) //距离起点字符偏移位置
str[startIndex] //

字符串比较

var varA   = "Hello, Swift!"
var varB   = "Hello, World!"

if varA == varB {
   print( "\(varA) 与 \(varB) 是相等的" )
} else {
   print( "\(varA) 与 \(varB) 是不相等的" )
}

字符串 filter

let str2 = "    a  b  c  d "
let res = String(str2.characters.filter  { $0 != " " })
res

字符串插入

let c:Character = "1"
str.insert(c, at: startIndex)

字符串大小写转换

var str = "hello, swift"
let shouty = str.uppercased()
let shoutx = str.lowercased()

判断字母首尾是否为某特定字符

str.hasPrefix("hello")
str.hasSuffix("swift")

强制类型转换 as

let s2 = NSString(format:"1/3 =  %.2f", 1.0/3.0) as String

NSString

let s3:NSString = "😄哈"
s3.length
s3.character(at: 1)
let s4 = "    hello world    " as NSString

s4.trimmingCharacters(in: .whitespaces) //去除空格