OC与Swift区别

  • OC一个类分.h头文件和.m实现文件,Swift只有一个.swift文件,文件数量上Swift比OC少;

  • Swift是类型安全的语言,也就是变量等的类型必须明确;

  • Swift引入了可选类型(Optionals),用于处理值缺失的情况。可选表示"那儿有一个值,并且它等于 x "或者"那儿没有值"。

  • Swift中的!和? 当确定可选类型确实包含值之后,可以在可选的名字后面加一个感叹号(!)来获取值。这个感叹号表示"我知道这个可选有值,请使用它。"这被称为可选值的强制解析(forced unwrapping),?表示可选变量即使转换不成功也不会报错,变量值为nil

  • Swift独有的元组类型 元组(tuples)把多个值组合成一个复合值。元组内的值可以是任意类型,并不要求是相同类型

  • Swift中使用let修饰常量,使用var修饰变量

  • OC中非0即是真,Swift中true是真,false是假

  • Swift的打印print可以print(lastName),不用OC那种%@、%d等

  • OC与Swift共用一套运行时环境,Swift的类型可以桥接到OC上,反之亦然,两者可以互相引用混合编程。

  • Swift与OC都是用ARC(自动引用计数)来管理内存

枚举:

OC的枚举相当于这个文件中的一个局部变量,且只能是整型(默认从0开始),也可指定整型值;在同一文件中,不同的枚举中,枚举名称不可以相同。
Swift的枚举,其枚举值支持整型、浮点型、字符串、布尔类型四种;创建时不分配默认整数值;可以通过rawValue访问其原始值;可以通过Week(rawValue:6)创建一个枚举实例

import UIKit

enum Week: Int {
    case Mon
    case Tues
    case Wes
    case Thu
    case Fri
    case Sat
    case Sun
}

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        
        //可以通过rawValue访问其原始值
        let fri = Week.Fri.rawValue
        print("This is ==\(fri)")
        
        //可以通过Week(rawValue:6)创建一个枚举实例
        let ins = Week(rawValue: 6)
        print("E \(ins ?? Week.Sat)")
    }
}
打印:
This is ==4
E Sun
数组

NSArray是OC中的类型,属于引用类型,Array是Swift中的结构体类型(struct),属于值类型
Swift数组是否可以被修改是通过var和let关键字决定的;OC中数组是否可以被修改是通过NSArray和NSMutableArray这两个类型来决定的;
Swift中数组,数据值被存储进入到某个数组之前类型必须明确,可以显式的类型标注或者类型推断,Swift的数组不必是对象类型,可以存储基本类型,而OC的数组必须是对象类型;

var cities = ["Beijing", "Shanghai", "Guangzhou"]
print(cities)
        
cities.append("Shenzhen")
print(cities)
        
var numbers: [Int] = []
numbers.append(888)
print(numbers)
打印:
["Beijing", "Shanghai", "Guangzhou"]
["Beijing", "Shanghai", "Guangzhou", "Shenzhen"]
[888]

字典

Swift的字典是否可以被修改是通过var和let关键字来决定的;
OC的字典是以NSDictionary和NSMutableDictionary来决定的;
Swift的字典的key可以是Int类型,而OC的字典的key一般是字符串类型

var dic1: [String: String] = ["name": "Jane", "age": "20"]
print(dic1)
        
dic1["height"] = "180"
print(dic1)
        
var dic2: [Int: String] = [1:"2222"]
print(dic2)
打印:
["name": "Jane", "age": "20"]
["name": "Jane", "age": "20", "height": "180"]
[1: "2222"]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容