swift基础

Swift开发入门-基础知识:https://www.jianshu.com/p/3b01707fed18

Swift 之 Alamofire 网络请求、https://blog.csdn.net/lvchenqiang_/article/details/77418272

最近Swift项目实践的小分享: https://www.tuicool.com/articles/I7naYjm

常见和变量

let 用于定义常量,定义完后不能修改。
var 用于定义变量,可以修改。

        let a = 10
        print(a)
        
        var b = 20
        b = 30
        print(b)
        
        let c: Int = 10
        print(c)
        let d: CGFloat = 20.3
        print(d)
        
        let res = c + Int(d)
        print(res)

UIButton

 override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor  = UIColor.white
        // Do any additional setup after loading the view.
        
        let myView = UIView(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
        myView .backgroundColor = UIColor.red
        view .addSubview(myView)
        
        let btn = UIButton(type: .custom)
        btn .setTitleColor(UIColor.black, for: .normal)
        btn .setTitle("FirstBtn", for: .normal)
        btn.backgroundColor = UIColor.yellow
        btn.frame = CGRect(x: 0, y: 0, width: 100, height: 50)
        btn.addTarget(self, action: #selector(buttonClick(btn:)), for: .touchUpInside)
        btn.titleLabel?.font = UIFont.systemFont(ofSize: 15)
        btn.layer.masksToBounds = true
        btn.layer.cornerRadius = 10.0
        btn.layer.borderColor  = UIColor.purple.cgColor
        btn.layer.borderWidth = 1
        myView .addSubview(btn)

    }
    
    @objc func buttonClick(btn:UIButton){
        btn.isSelected  = !btn.isSelected
        if btn .isSelected {
            btn.setTitle("Selected", for: .normal)
        }else{
            btn.setTitle("NoSelected", for: .normal)
        }
    }

什么是可选类型

可选类型伴随着Swift诞生,在原有的Objective-C语言中不存在,究其原因,是因为Swift是类型安全的语言,而OC则是弱类型语言,OC中 str字符串既可以是nil,也可以是字符串,而Swift中,这两种状态是不能同时存在的。
OC和Swift对于nil的解释也是不太一样的

var optionalStr: String? = "swift语言可选类型"//声明可选类型字符串,并赋初值
var opStu:Student? //声明可选opStu对象,赋初值nil

强制解析

当你确定自定义的可选类型一定有值时,可以使用操作符(!)进行强制解析,拿到数据,叹号表示"我知道一定有值,请使用它",但是当你判断错误,可选值为nil时使用(!)进行强制解析,会有运行错误。

var myStr:String? = nil
myStr="强制解析,一定有值"
if myStr != nil {
    print(myStr!)//使用!进行强制解析
}else{
    print("字符串为nil")
}

输出:强制解析,一定有值

自动解析

在最初的声明时使用?修饰,当你希望它自动解析是可以用!代替?来修饰,这样在变量使用时就不需要加!来强制拆包,它会自动解析。

var myStr:String! //使用!修饰
myStr="自动解析"
if myStr != nil {
    print(myStr)
}else{
    print("字符串为nil")
}

输出:自动解析

可选绑定

var myStr:String?
myStr="可选绑定"
if  let tempStr = myStr {
    print(tempStr)//如果myStr有值的话,就会赋值给tempStr,然后使用
}else{
    print("字符串为nil")
}
输出:可选绑定

as! 与 as? 的类型转换

向下转型(Downcasting)时使用。由于是强制类型转换,如果转换失败会报 runtime 运行错误。就是说强制从父类转换成子类

class Animal {}
class Cat: Animal {}
let animal :Animal  = Cat()
let cat = animal as! Cat

as? 和 as! 操作符的转换规则完全一样。但 as? 如果转换不成功的时候便会返回一个 nil 对象。成功的话返回可选类型值(optional),需要我们拆包使用。由于 as? 在转换失败的时候也不会出现错误,所以对于如果能确保100%会成功的转换则可使用 as!,否则使用 as?

let animal:Animal = Cat()

if let cat = animal as? Cat{
    print("cat is not nil")
} else {
    print("cat is nil")
}

向下转换
某个类类型的常量或变量实际上可能是其子类的实例。这种情况下,我们会用到类型转换操作符( as? 或 as! )向下转换为子类类型。

as? :类型转换的条件形式,向下转换为某个类型时,返回该类型的可选值,即:转换失败时返回 nil 。使用场景:向下转换可能会失败的情况。

as! :类型转换的强制形式,向下转换为某个类型时,会进行强制解包,即:转换失败时触发运行时错误。使用场景:向下转换确定不会失败

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 做个理性的女人——不爱理你的人就别去打扰了,赔了笑脸还丢了尊严,就算再爱,你也不能一直不要脸 做个理性的女人——习...
    神神叨叨的神叨叨阅读 946评论 1 3
  • 有人说,朴树像是一个被世界遗弃的可怜孩子,可我却觉得是他抛弃了这个世界。 提起朴树,似乎总是脱离不...
    唐半仙阅读 202评论 0 3
  • 今天下午,又去赛石新楼盘去看房子,同时,售楼处对购楼资金进行验证。 妻去看过几次,对其中的一个比较心仪。 之前,妻...
    两张机阅读 372评论 0 1