Swift是苹果公司于2014年推出的一门全新的编程语言,目前已进化至第三版。Swift博众编程语言之所长,简单易学,功能强大,可用于开发iOS、macOS、tvOS、watchOS程序。

出于个人的兴趣,我下载了Swift官方文档《The Swift ProgrammingLanguage》的中英文版,并在工作之余对文档进行了仔细的阅读。在阅读的过程中,我越发地感受到了Swift的强大。简单地说,Swift是一门智能型的语言,为程序员解决了在使用很多其他的编程语言的过程中所经常遇到的问题。

下面,我就拿Swift和C语言进行对比,用几个例子为大家展示Swift为何是“智能”的。

1.程序样式
大家都知道,C语言(以及很多其他语言)的程序入口点都是main函数,我们要将程序语句放到main函数中,才会得到我们想要的执行结果。

例如,最简单的,我们想要在屏幕上输出“Hello,world!”,C语言的实现代码如下:

int main()
{
    printf("Hello,world!\n");

    return 0;
}

而如果我们使用Swift来实现,那么就只需要一行代码:

print("Hello,world!")

也就是说,在Swift中,一行代码就是一个完整的程序。全局作用域中的代码会被自动作为程序的入口点,因此也不需要main函数了。

很多程序员都有这样的经历:花费了很多时间在数万行代码中寻找main函数,结果发现main函数正躲在某个僻静的地方看着自己。在Swift中,我们可以从上到下阅读代码,全局作用域中的第一行代码就相当于main函数了。

此外,在C语言(以及很多其他语言)中,每条语句的结尾必须用分号来结束,很多时候程序编译不通过的原因就是某条语句结尾的分号忘写了。但是,在Swift中,我们不需要在每条语句的结尾添加分号,只要这条语句的语法是完整的就可以了。

从程序样式可以看出,Swift提高了程序员编写和阅读代码的效率,让大家不必拘泥于固定的程式,可以较为自由地编写代码。

2.变量声明
在C语言中,我们声明变量的语句如下:

int  age = 0;
char str[100] = {0};

每个变量都必须要指定其类型,如果不这样做,程序编译就会不通过。

在Swift中,声明变量的时候可以不用指定其类型,但需要赋初值,编译器会自动推断其类型,代码如下:

var age = 30
var str = "Hello"

可以看到,我们用var声明变量,age的初值为30,因此编译器会推断该变量是整型;str的初值是字符串,因此编译器会推断该变量是字符串(String)。

在Swift中,我们用let来声明常量。与声明变量一样,声明常量的时候也可以不用指定其类型,但需要赋初值,编译器会自动推断其类型,代码如下:

let age = 30
let str = "Hello"

从上面代码可以看出,age的初值为30,因此编译器会推断该变量是整型常量;str的初值是字符串,因此编译器会推断该变量是字符串(String)常量。

想必很多程序员都遇到过变量未指定类型或指定了错误的类型而程序出错的情况,Swift为大家解决了这个问题。从变量类型的自动推断中也可以看出,Swift具备一定的“智能”。

3.输出打印
在C语言中,我们用printf函数来输出变量的值或打印日志,语句如下:

printf("%d",age);
printf("The value of str: %s",str);

在Swift中,我们用print函数来输出变量的值或打印日志。当只需要输出变量值时,语法如下:

print(age)

当需要打印包含变量值的日志时,语法如下:

print("The value of str: \(str)”);

可以看到,Swift简化了输出操作,直接将变量放到print函数(该函数自带回车换行)中即可输出结果。如果要输出包含变量值的信息,只需要将变量名放到小括号中,同时在括号前面添加反斜杠就可以了。而在C语言中,变量的输出信息必须要和变量名分离开来。

当需要输出的变量值个数很多时,printf函数很容易出现前后变量个数不一致的情况,从而导致程序报错甚至崩溃,例如下面的程序:

printf("%d,%d,%s,%d",age1,age2,age3,age4,age5,str);

在上面的代码中,我们本来想让printf函数输出7个变量的值,但后面只罗列了6个变量,程序运行就会出错。但在Swift中,这种情况就不会发生,因为每个需要打印值的变量就直接写在了输出消息中,不需要寻找前后的对应关系:

print("\(age1),\(age2),\(age3),\(age4),\(age5),\(str),\(age6)”)

上面的3个例子为大家展示了Swift与其他编程语言不同的一面,可以说它的出现解决了长期以来困扰广大程序员的一些痛点和难点,为大家打开了一片全新的天地。那么,Swift是否受到了大家的欢迎呢?下面是TIOBE的2016年10月编程语言排行榜前20名的名单,Swift位列第12名,较去年同期有所上升。考虑到Swift也才推出来两年,这个排行算是不错的了。

顺便提一下,为了推广Swift,苹果公司已经将其开源。这是Swift的开源地址,大家可以多多关注:https://swift.org/。

Swift---一门智能型的编程语言的更多相关文章

  1. ios – 如何使用Objective C类中的多个参数调用Swift函数?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  2. 使用最新的Flurry SDK和ios4重新启动应用程序

    我真的希望这对我来说只是一个愚蠢的错误.我很高兴使用Flurry但这样的事情会导致我的应用被拒绝.解决方法我写了关于这个的Flurry,他们很快回到我身边,他们会调查这个.大约一个星期后,他们回信并表示他们已经在v2.6中修复了它,现在可用了.我似乎无法重现这个问题.不是说我很棒或者什么,但我还是单枪匹马地解决了这个问题.

  3. ios – Swift 4添加手势:覆盖vs @objc

    我想在我的视图中添加一个手势,如下所示:但是,在Swift4中,我的编译器给出了以下错误:建议添加@objc以将此实例方法公开给Objective-C.实现此目的的另一个选项将覆盖touchesBegan()函数并使用它来处理点击.我试图以“Swift”的方式做到这一点,而不必带入Obj-C.有没有纯粹的Swift方式来添加这个轻击手势而不使用@objc?

  4. ios – 将视频分享到Facebook

    我正在编写一个简单的测试应用程序,用于将视频从iOS上传到Facebook.由于FacebookSDK的所有文档都在Objective-C中,因此我发现很难在线找到有关如何使用Swift执行此操作的示例/教程.到目前为止我有这个在我的UI上放置一个共享按钮,但它看起来已禁用,从我读到的这是因为没有内容设置,但我看不出这是怎么可能的.我的getVideoURL()函数返回一个NSURL,它肯定包含视

  5. ios – 以编程方式在Swift中添加联系人

    我想在Swift中以编程方式添加联系人.我发现了一些Objective-C示例,但我没有让它们工作,甚至在Objective-C中也没有.我不希望这涉及到AddressBookUI,因为我想从我自己的UI中获取值.解决方法这是在Swift中添加联系人的快速方法.我在我的iPhone5iOS7.1上验证了它,因为我发现模拟器并不总是与我的手机对AB的东西相同.您可以添加一个按钮并指向此方法:顺便说一下–它假设你已经分配了一个地址簿var,你可以通过覆盖viewDidAppear来打开视图.它也会执行安全提示

  6. ios – 如何从变量访问属性或方法?

    是否可以使用变量作为Swift中方法或属性的名称来访问方法或属性?在PHP中,您可以使用$object->{$variable}.例如编辑:这是我正在使用的实际代码:解决方法你可以做到,但不能使用“纯粹的”Swift.Swift的重点是防止这种危险的动态属性访问.你必须使用Cocoa的Key-ValueCoding功能:非常方便,它完全穿过你要穿过的字符串到属性名称的桥,但要注意:这里是龙.

  7. ios – 无法识别的选择器发送到实例NSTimer Swift

    解决方法让updateTime成为一个类方法.如果它是在一个纯粹的Swift类中,你需要在@objc前面说明该方法的声明,如:

  8. iOS >>块>>更改块外部的变量值

    我不是在处理一个Object并改变它,就像我的mString一样.我希望’center’属性的行为类似于myInt,因为它是直接访问的C结构,而不是指向对象的指针.我希望’backgroundColor’的行为类似于我的imstring,因为它是一个指向一个新对象的对象的指针,不是吗?

  9. ios – Xcode Bot:如何在post触发器脚本上获得.ipa路径?

    我正在使用机器人来存档iOS应用程序,我需要获取.ipa产品路径才能将其发布到我们的分发系统中.机器人设置:并使用脚本打印所有env变量,其中不包含ipa文件的路径.此外,一些变量指向不存在的目录,即:XCS_OUTPUT_DIR这里的env变量输出:除此之外,我还能够确认.ipa文件是在另一个文件夹中创建的(/IntegrationAssets//

  10. ios – 为目标c中的方法传递未知类型的参数,可能吗?

    是否可以将未知类型的参数传递给objective-C方法?在C#中你可以写实现这一点,但我知道Objective-C没有泛型,所以有没有其他方法可以在Objective-C中实现这一点?我需要这个,因为我想创建一个方法来改变不同对象的文本颜色,如UITextField和UIButton的占位符文本.所以我的计划是创建一个名为textWhite的方法,然后在此方法中检查对象的类型,然后运行匹配的代码以使文本颜色变为白色.解决方法是的,可以传递未知类型的参数.见下面的例子.请参考使用id对象的链接作为参数Us

随机推荐

  1. Swift UITextField,UITextView,UISegmentedControl,UISwitch

    下面我们通过一个demo来简单的实现下这些控件的功能.首先,我们拖将这几个控件拖到storyboard,并关联上相应的属性和动作.如图:关联上属性和动作后,看看实现的代码:

  2. swift UISlider,UIStepper

    我们用两个label来显示slider和stepper的值.再用张图片来显示改变stepper值的效果.首先,这三个控件需要全局变量声明如下然后,我们对所有的控件做个简单的布局:最后,当slider的值改变时,我们用一个label来显示值的变化,同样,用另一个label来显示stepper值的变化,并改变图片的大小:实现效果如下:

  3. preferredFontForTextStyle字体设置之更改

    即:

  4. Swift没有异常处理,遇到功能性错误怎么办?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 字典实战和UIKit初探

    ios中数组和字典的应用Applicationschedule类别子项类别名称优先级数据包contactsentertainment接触UIKit学习用Swift调用CocoaTouchimportUIKitletcolors=[]varbackView=UIView(frame:CGRectMake(0.0,0.0,320.0,CGFloat(colors.count*50)))backView

  6. swift语言IOS8开发战记21 Core Data2

    上一话中我们简单地介绍了一些coredata的基本知识,这一话我们通过编程来实现coredata的使用。还记得我们在coredata中定义的那个Model么,上面这段代码会加载这个Model。定义完方法之后,我们对coredata的准备都已经完成了。最后强调一点,coredata并不是数据库,它只是一个框架,协助我们进行数据库操作,它并不关心我们把数据存到哪里。

  7. swift语言IOS8开发战记22 Core Data3

    上一话我们定义了与coredata有关的变量和方法,做足了准备工作,这一话我们来试试能不能成功。首先打开上一话中生成的Info类,在其中引用头文件的地方添加一个@objc,不然后面会报错,我也不知道为什么。

  8. swift实战小程序1天气预报

    在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。然后在btnpressed方法中依旧增加loadWeather方法.在loadWeather方法中加上信息的显示语句:运行一下看看效果,如图:虽然显示出来了,但是我们的text是可编辑状态的,在storyboard中勾选Editable,再次运行:大功告成,而且现在每次单击按钮,就会重新请求天气情况,大家也来试试吧。

  9. 【iOS学习01】swift ? and !  的学习

    如果不初始化就会报错。

  10. swift语言IOS8开发战记23 Core Data4

    接着我们需要把我们的Rest类变成一个被coredata管理的类,点开Rest类,作如下修改:关键字@NSManaged的作用是与实体中对应的属性通信,BinaryData对应的类型是NSData,CoreData没有布尔属性,只能用0和1来区分。进行如下操作,输入类名:建立好之后因为我们之前写的代码有些地方并不适用于coredata,所以编译器会报错,现在来一一解决。

返回
顶部