swift语言的优缺点,swift 优点

http://www.itjxue.com  2023-01-14 13:15  来源:未知  点击次数: 

Swift语言特性总结--安全性

Swift是一门静态语言,用静态语言编写的程序的行为在编译完成后就已经确定,在运行时不能修改和拓展。这样虽然损失一些灵活性,但是会更加安全。

注意:Swift可以通过继承自NSObject来获得动态性支持。

Swift是类型安全型语言。编译器会对实例类型进行检查,不匹配的话就会编译错误。比如不能将Int类型的变量赋值给String类型的变量;不能将一个可选值赋值给一个非可选值的变量。编译器类型检查可以帮助开发者尽可能早的发现问题。

Swift明确引入了可选类型的概念。可选类型表示一个变量所指向的实例可能存在,也可能不存在,Swift把这种可选类型的变量叫做可选值。

在获取可选值的内容时,语法机制会保证开发者注意到其内容不存在的情况,以 提醒开发者去处理值缺省的情况 。

内容不存在时,用nil表示,OC里也可以使用nil表示内容不存在,但是 仅限于对象类型 ,基础数据类型和结构则不能使用nil;Swift里 所有类型 都可使用nil。OC的nil是一个空指针,Swift的nil是一种语言特性。

Swift构造器可以保证所有非可选类型的属性都能被初始化,这样在后续使用中确保非可选类型属性都有值。

Swift将字符串、数组、字典这些类型都设计成值类型,对应的在OC中则是引用类型。值类型存储在栈上,没有引用计数,由操作系统管理内存,没有内存泄漏的风险;引用类型则是放在堆上,需要开发者管理内存。

Swift值类型引入写时复制技术,使得共享实例的变量在发生修改时会先执行复制,这样共享实例的变量之间的修改都是独立的;引用类型无论在赋值时还是修改时,都是直接访问操作共享的实例对象,变量的修改会影响共用同一个实例的其他变量。

Swift通过escaping 和 nonescaping 来明确区分作为方法参数的闭包的类型。非逃逸闭包,是生命周期同方法的作用域一致的闭包,当方法调用结束,闭包就被释放,同时闭包所捕获的实例或引用也会被释放。逃逸闭包,也就是闭包的生命周期逃逸出方法的作用域,这个时候就要注意其捕获的实例是否会导致内存泄漏问题。Swift通过这两个关键字提醒开发者注意内存泄漏问题。

Swift和Objective-C的优缺点对比

Swift和Objective-C共用一套运行时环境,Swift的类型可以桥接到 Objective-C (下面我简称OC),反之亦然

其次就是, OC之前的积累的很多类库,在Swift中大部分依然可以直接使用 ,当然,Swift3之后,一些语法改变了很多,不过还是有迹可循的。OC出现过的绝大多数概念,比如引用计数、ARC、属性、协议、接口、初始化、扩展类、命名参数、block等,在Swift中继续有效(可能最多换个术语)。Swift大多数概念与OC一样。当然Swift也多出了一些新兴概念,这些在OC中是没有的,比如泛型、元组。

但是:现阶段Swift能完全取代Objective-C吗?

答案是还不行。

其实到现在为止Swift离完全替代Objective-C还是很遥远,因为Apple内部一直在用 Objective-C 来做一些Framework的开发,底层也不可能用Swift实现,所以现在更多的替代是体现在外部开发。

Objective-C中循环引用也是遇到比较多的,一不小心就会导致循环引用,甚至导致内存问题

Swift

Objective-C

如何评价 Apple 新推出的编程语言 Swift

有人说它相当于 C#,或是相当于 Scala 对 Java 的改进,我可以告诉大家,Swift 不是这样的语言。它更像一种让人快速做原型的 toy language。

要求 Apple 发布下一代 Objective-C 语言的呼声早就有了,每年写数万字 OS X 评论的 Ars Technica 两年前就写了 Apple 应该去做一个语言,Objective-C without C 并且使用更现代的功能和更短的 API,以及对自动类型推导的支持,文章见

OS X 10.8 Mountain Lion: the Ars Technica review 。

但 Apple 显然没有认真对待这门语言。很明显的,他们根本不想把ObjC给替换掉。并且按Apple的风格,如果他们把Swift当ObjC的未来来对待,肯定会有一到两个iOS/Mac应用使用Swift改写。(比如Apple 当年要砍 Carbon,首先做的就是把 Finder 重写了)。

从语言角度,Swift 有太多的缺点:

- 它的标准库太差,只有Dictionary, Array 和 String及数这几种数据结构,连个 Set 都没有。想用别的?你还是要用 ObjC 的。

- 它没有任何对异步/同步编程的支持。它没法绑定使用 GCD,因此任何正经的网络应用根本无法编写。

- 它没有任何的保护机制(private, protected),所有的 method和 variable 都是全局可见的,这显然不能满足正经工程项目的需要。

- 只能和 ObjC 互动。如果你想正经地使用C或者C++,你得写 ObjC 的 wrapper。

- 没有办法 catch Objective-C 的 exception,如果一旦出了 exception,你的 App 立马就崩了。

Chris 在设计这门语言时,可以明显地看到他的短视。这也很正常,他是一个做编译器的,不是做语言研究的。所以这门声称支持函数式编程的语言,根本不是函数式的:

- 仅有的支持在lazy,闭包,及简单的函数语言函数(如map, filter)。这ObjC中都能做

- 没有pattern matching

- 类型推导差不多和 C++11 差不多,没有使用hindley milner。

从上面这些特点看, Apple对其的定位仅是给对ObjC头疼的开发者降低学习曲线所推出的玩具语言。前面五条中的每一条,基本都是致命的,因此 Apple 自己的项目也不会使用。做个早期 proof of concept的 prototype 到是可以的。

如何评价 Swift 语言

您好,我来为您解答: 作于语言来说Swift其实没啥好说的,no silver bullet对于新语言永远适用。 Playground在实际开发中我觉得没有预期的那么大,因为多数应用逻辑复杂且上下文相关性很强。 但是对于原型开发会非常有帮助。

1、Swift语言特点

swift的特点:

?? ? 1、swift是一种强类型语言,所有变量在声明或者定义的时候会确定类型,并且这个类型不能再被修改。

?? ? 2、swift是安全的,强类型是安全性的体现之一。

?? ? 3、swift所有的变量(可选型除外)都必须经过初始化才能访问使用,

? ? ? ? (1)、非可选型变量,必须初始化,在结构体和类中,未初始化的非可选型属性,必须在构造函数中先进行初始化

? ? ? ? (2)、可选型

? ? ? ? ? ? 显式声明?:

? ? ? ? ? ? ? ? 如String?,无需初始化,默认值为nil,使用时需要解包返回确切类型数据使用

? ? ? ? ? ? 隐式声明!:

? ? ? ? ? ? ? ? 如String!,也无需要初始化,默认值nil,可以解包,也可以不解包直接使用,也就是说,比var t:String! = "TEST",如果有一个变量a是String类型,一个变量b是String?类型,那么若a = t,那么可选型t就无需解包,直接返回一个确切的String类型,而b = t,则是返回一个可选型,这种可选型根据实际需要自动处理

? ? ? ? ? ? Optional方式声明:

? ? ? ? ? ? ? ? 需要初始化,这种方式不会自动初始化一个nil值,并且这种方式的也是显示声明

?? ? 4、swift数据类型分值类型和引用类型:

? ? ? ? 值类型:一般内存分配在栈中,进行赋值都是深拷贝,会开辟全新的内存空间给新变量,对新变量修改不会影响原变量,结构体(struct)、枚举(enum)等都是值类型,像Int、Double、Float、元组、String、Array、Dictionary、Set等,实质都是struct,所以也是值类型

? ? ? ? 引用类型:就是指针,一般内存分配在堆中,进行赋值会只拷贝值的内存地址,不会开辟新的内存空间给新变量存储值,对新变量修改会影响原变量,像类、闭包、函数等,都是引用类型

?? ? 5、_在swift中有特殊的意义,一般使用来,用于占位进行忽略,比如函数参数名忽略,比如10_000(跟10000一样,但是加_后更易读)

?? ? 6、swift语言,在类的继承上,方法是可重写的,而在类中,方法也是可重载的

?? ? 7、swift中,可选型的本质是枚举

?? ? 8、swift是面向协议的语言:

? ? ? ? (1)、swift语言是面向对象的,但是swift标准库中,基础类只有几个,而协议类型却有几十个,充分说明了swift语言中协议的重要性

? ? ? ? (2)、与OC中的协议不同的是,swift的协议是可多继承和扩展的,并且协议里不仅可以有方法,还可以有属性,这是OC的协议不具备的,在swift中,协议的存在,能更好的去抽象出两个不同事物的共同特性,做到一些类无法做到的是,比如飞机和鸟,明显不同类型,也没有继承关系的两种类型,他们都有翅膀、都会飞行的共同性,最好的选择就是协议了

如何评价 Swift 语言,Swift语言怎样?

Swift是Apple在WWDC2014所发布的一门编程语言,用来撰写OS X和iOS应用程序。在设计Swift时.就有意和Objective-C共存,Objective-C是Apple操作系统在导入Swift前使用的编程语言 Swift是供iOS和OS X应用编程的新编程语言。作于语言来说Swift其实没啥好说的,no silver bullet对于新语言永远适用。Playground在实际开发中没有预期的那么大,因为多数应用逻辑复杂且上下文相关性很强。但是对于原型开发会非常有帮助。

(责任编辑:IT教学网)

更多

推荐Discuz!建站文章