在基础学习中,我们大致了解swift开发了,本篇文章中将对swift数据类型进行介绍,swift数据类型和java 也很类似。 我们知道java要求我们在每条语句的结尾都必须带上分号(;),而swift并不强制要求这一点,但我喜欢加上分号(;)更好一点 废话少说;

##数据类型 进制、整形、浮点类型、布尔类型、元组、数据的可读性(标示)

1.整数(Int)

let a = 10; 
//系统推断为Int类型
let b:Int=10; //一样的

2.浮点数(Float、Double)

let pi = 3.14159 //系统优先推断为Double类型
let pi2:Float=3.14159 //指定为Float类型

3.布尔类型(Bool)

let type = true //系统推断为Bool类型,用true 和false 表示

3.元组(tuples)结构体和数组的杂交

let rect = (40,150) //系统推断为tuples类型
//rect类型是(Int,Int),值是(40,150)
let china = (10,"中国")
//china类型是(Int,String),值是(10,"中国")
let (code, name) = china //意思是吧china元组分解出来code=10,name="中国";
print("name=\(name)");//name="中国"
let (_, name) = china//将忽略code 只分解name="中国"

元组的访问,可以通过索引(跟数组类似)来访问,或者跟结构体类似,通过Key来访问

let china = (10,"中国")
var  A = (frist:10,second:"中国")
china.0 和A.frist 是一样的

4.可选类型(optionals)

在Java中基本数据类型变量没有赋值默认为0 Swift语言使用var定义变量,不会自动给变量赋初始值,也就是说变量没有默认值,所以要求使用变量之前必须要对其初始化。 可选类型(optionals)?&! Optional其实是个enum,里面有None和Some两种类型。其实所谓的nil就是Optional.None, 非nil就是Optional.Some

var strValues:String?   //系统推断为optionals类型,表明值可以为nil
// strValues 被自动设置为 nil Swift和Object-c nil 不一样 Object-c nil是指向不存在对象的指针,Swift是一个确定值就是Optional.None
if strValues==nil { 
    print("无值");
} 
//输出结果:无值

类型的!和? !表示 一定有值 、?表示可能没有值

@IBOutlet weak var resultTextView: UITextView!  //UITextView 一定是有值的

隐式的可选值实例介绍

let strValue1: String? = "可选值"
let strValue2: String? = strValue1 // 编译成功!strValue1 strValue2 都可能没有值

let strValue3: String? = "可选值"
let strValue4: String = strValue3! // 编译成功!需要惊叹号来获取值


let strValue3: String = "可选值"
let strValue4: String = strValue3 //编译成功! 不需要感叹号
//以下情况编译报错

let strValue1: String? = "可选值"
let strValue2: String = strValue1 // 编译失败!strValue1可能没有值

问号?和! 什么时候用? a.声明时添加?,告诉编译器这个是Optional的,如果声明时没有手动初始化,就自动初始化为nil b.在对变量值操作前添加?,判断如果变量时nil,则不响应后面的方法。 叹号! a.声明时添加!,告诉编译器这个是Optional的,并且之后对该变量操作的时候,都隐式的在操作前添加! b.在对变量操作前添加!,表示默认为非nil,直接解包进行处理 5.错误处理(error handling) 跟Java try catch类似,下面来看看一个简单的Swift异常处理

//定义异常类型
enum MyError: ErrorType {
    case ERROR
    case ISNULL
}
func testError()throws{
        var strValues:String?
        if strValues == nil{
          throw MyError.ISNULL;
        }
}
    
do{
        try testError();//处理异常
    }catch MyError.ISNULL{
        print("空值")
}