程序员

Swift可选类型与as

2020-06-09  本文已影响0人  奔跑的鸿

可选类型

var nora: Int
nora = 10
print(nora)

//let num3: Int
//print("\(num3)")    Constant 'num3' used before being initialized

由于普通变量只有一种状态, 有局限性, 所以Swift设计了可选类型。

var opa: Optional<Int>
var opb: Int?

Swift 的 Int 类型有一种构造器,作用是将一个 String 值转换成一个 Int 值,然而该构造器可能会失败,所以它返回一个可选类型 optiona(Int),如下:

let possibleNumber = "123"
let convertedNumber = Int(possibleNumber)
// convertedNumber 被推测为类型 "Int?", 或者类型 "optional (Int)"
//有值
var optValue1: Int? = 9
//没有值
var optValue3: Int? = nil
var optValue2: Int?           //没有提供初始值,它的值默认为nil
var optValue1: Int? = 9
var optValue4: Int?
if optValue4 != nil
{
    print(optValue4 as Any)
}else
{
    //optValue1是可选变量,不作处理会有警告
    //确定optValue1有值的情况下,也可以这么处理:print(optValue1!)
    print(optValue1 as Any)    //输出Optional(9)。编译器会隐式强制将optional转换成as Any,不写有警告
}
var optValue5: Int? = 10
var result1: Int = optValue5!
print(result1)        //输出10

//报错:
//var optValue6: Int?
//var result2: Int = optValue6!
//print(result2)
var optValue7: Int?
optValue7 = 11
if let result3 = optValue7    //这里result3不需要写明类型,类型与optValue7保持一致
{
    print(result3)        //输出11
}
//OC普通变量
//NSData *data = [NSData .dataWithContentsOfMappedFile:@"/Users/hanjunqiang/Desktop/StudyEveryDay/H5/第一阶段/小说.html"];
//NSLog("%@", data);

//Swift可选类型
var data:NSData? = NSData(contentsOfFile: "/Users/hanjunqiang/Desktop/StudyEveryDay/H5/第一阶段/小说.html") //测试地址, 换成你自己路径地址文件即可
//print(data as Any)

Swift中的 as、as!、as? 三种操作符

class Person {}

// 定义学生类
class Student : Person {
}

// 定义一个学生对象 tom
var tom = Student("Tom");
// 把学生对象向上转型为一般的人员对象
let person1 = tom as Person
let person : Person = Teacher("Jimmy Lee")
let jimmy = person as! Teacher
let person : Person = Teacher("Jimmy Lee")
if let someone = person as? Teacher{
    print("这个人是教师, 名字是 \(someone.name)")
} else {
    print("这个人不是教师, 'tom'的值是 nil")
}
上一篇 下一篇

猜你喜欢

热点阅读