[IOS]《A Swift Tour》翻译(一)
以下翻译内容为原创,转载请注明:
来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3768936.html
碎碎念。。。
Swift是苹果在WWDC刚发布的新语言,本人也没学过,现在看苹果官方文档一边翻译一边学习,再加上英语水平和对编程理解很有限,有错误的地方请大家指出,翻译只供参考,建议阅读苹果Swift官方的文档
Swift 之旅
按照传统,在开始学习一门新的语言时写的第一个程序应该是在屏幕上打印“Hello, World”,这个可以用一行来完成:
print(“Hello, world”)
如果你有写过C或者Objective-C的经验,这个语法你应该会感觉很熟悉——在Swift中,这行代码就是一个完整的程序。你不需要像输入输出流或者字符串处理等那样去导入另外的具有功能性的库。在全局范围编写的代码即是程序的入口点,所以你不需要一个main方法。你也不需要在每个语句后面写上分号。
这个旅程会带给你足够的信息让你用Swift来完成各种编程任务。不用担心你是否懂得一些编程——这本书对各个方面都进行来详细的介绍。
基本数据
使用let来表示一个常量,使用var来表示一个变量。常量的值不需要在编译时期被知道,但是你必须且只能一次分配一个值给它。这表示你一旦给这个常量分配了一个值,你就能在很多地方使用它了。
var myVariable = 42;
myVariable = 50;
let myConstant = 42;
一个常量或者变量的类型必须要跟你分配给它的值的类型一致。然而,你一般不需要精确的写明它的类型。当你创建了一个常量或者变量,并赋值后,编译器会自动推断出它的类型。比如在上面的例子中,编译器会推断出myVariable是一个integer,因为它的初始值就是一个integer。
如果初始值不能提供足够的信息(或者它根本没有初始值),可以在这个变量后面加上冒号,然后写上指定类型。
let implicitInteger = 70
let implicitDouble = 70.0
let explicitDouble: Double = 70
值不会隐式地被转换成另一种类型。如果你需要转换成一个不同类型的值,显示地生成一个期望类型的实例。
let label = “The width is ”
let width = 94
let widthLabel = label + String(width)
还有一个更简单的方法,在字符串中包含变量值:写一对括号里面写一个变量值,然后在括号前面写一个反斜杠,举个例子:
let apples = 3
let oranges = 5
let appleSummary = “I have \(apples) apples.”
let fruitSummary = “I have \(apples + oranges) pieces of fruit.”
使用中括号([])来创建一个数组或者字典,使用index(索引)或者key(键)访问他们的某一项。
var shoppingList = [“catfish”, “water”, “tulips”, “blue paint”]
shoppingList[1] = “bottle of water”
var occupations = [
“Malcolm”: “Captain”,
“Kaylee”: “Mechanic”,
]
occupations[“Jayne”] = “Public Relations”
使用初始化器的语法来创建一个空的数组或者字典。
let emptyArray = String[]()
let emptyDictionary = Dictionary<String, Float>()
如果类型信息是可推断的,你可以使用[]创建一个空的数组,使用[:]来创建一个空的字典,举个例子,当你设置一个新的值或者往方法中传入一个变量作为参数
shoppingList = []
控制语句
使用if和switch来创建一个条件,使用for-in,for,while和do-while来创建一个循环。
条件和循环变量上的括号是可选的。if后面大括号和循环体的大括号是必须的。
let individualScores = [75, 43, 103, 87, 12]
var teamScore = 0
for score in individualScores{
if score > 50{
teamScore += 3
}else{
teamScore += 1
}
}
teamScore
在一个if语句中,条件必须是一个布尔类型的表达式——这表示像if score { … }这样的代码是错误的,这个score并不是隐式地去跟0比较。
你可以在值可能为空的时候同时使用if和let。这些值就被表示为可选地。一个可选的值可能包含一个值或者包含一个nil,nil表示这个值是空。在这个值的类型后面写上一个疑问符号(?)可以把这个值标记为可选的。
var optionalString: String? = “Hello”
optionalString == nil
var optionalName: String? = “John Appleseed”
var greeting = “Hello!”
if let name = optionalName{
greeting = “Hello, \(name)”
}
如果可选值是nil,那么这个条件就为false,大括号中代码就会跳过。否则,可选值执行后面代码块中的代码并分配给let后面的常数。
Switches支持各种数据和各种各样的比较操作——它们不局限于integers和相等式的比较。
let vegetable = “red pepper”
switch vegetable{
case “celery”:
let vegetableComment = “Add some raisins and make ants on a log.”
case “cucumber”, “watercress”:
let vegetableComment = “That would make a good tea sandwich.”
case let x where x.hasSuffix(“pepper”):
let vegetableComment = “Is it a spicy \(x)?”
default:
let vegetableComment = “Everything tastes good in soup.”
}
在匹配的case中执行完代码后,程序退出switch语句。执行不会在下一个case中继续,所以不需要显示的在每个cases中的最后依次写上跳出该switch的break语句。
你可以使用for-in语句来迭代键值对形式的字典中的所有items。
let interestingNumbers = [
“Prime”: [2, 3, 5, 7, 11, 13],
“Fibonacci”: [1, 1, 2, 3, 5, 8],
“Square”: [1, 4, 9, 16, 25],
]
var largest = 0
for(kind, numbers) in interestingNumbers{
for number in numbers{
if number > largest{
largest = number
}
}
}
largest
使用while来重复代码块中的代码,直到条件改变。循环条件也可以放在最后,可以确保这个循环至少执行一次。
var n = 2
while n < 100{
n = n * 2
}
n
var m = 2
do{
m = m * 2
} while m < 100
m
你可以在循环中保持一个索引index——通过使用..来限定一个索引范围或者指明初始值,条件和增量。下面两个结果一样的循环:
var firstForLoop = 0
for i in 0..3{
firstForLoop += i
}
firstForLoop
var secondForLoop = 0
for var i = 0; i < 3; ++i{
secondForLoop += 1
}
secondForLoop
使用..来限定范围会省略范围的上限值,使用...来限定范围会包含所有限定值。(译者注:..是左闭右开整数区间,…是左闭右闭整数区间)
[IOS]《A Swift Tour》翻译(一)的更多相关文章
- 1.Swift教程翻译系列——关于Swift
英文版PDF下载地址http://download.csdn.net/detail/tsingheng/7480427 我本来是做JAVA的.可是有一颗折腾的心,苹果公布Swift以后就下载了苹果的开 ...
- iOS、swift、React Native学习常用的社区、论坛
<!----iOS> <!----Swift>*IOS开发常用社区:http://code4app.com/ *IOS开发常用社区:http://www.cocoachina. ...
- iOS开发Swift篇—(一)简单介绍
iOS开发Swift篇—简单介绍 一.简介 Swift是苹果于2014年WWDC(苹果开发者大会)发布的全新编程语言 Swift在天朝译为“雨燕”,是它的LOGO 是一只燕子,跟Objective-C ...
- iOS开发Swift篇—(二)变量和常量
iOS开发Swift篇—(二)变量和常量 一.语言的性能 (1)根据WWDC的展示 在进行复杂对象排序时Objective-C的性能是Python的2.8倍,Swift的性能是Python的3.9倍 ...
- iOS开发Swift篇—(三)字符串和数据类型
iOS开发Swift篇—(三)字符串和数据类型 一.字符串 字符串是String类型的数据,用双引号""包住文字内容 let website = "http://www ...
- iOS开发Swift篇—(四)运算符
iOS开发Swift篇—(四)运算符 一.运算符 1.Swift所支持的部分运算符有以下一些 赋值运算符:= 复合赋值运算符:+=.-= 算术运算符:+.-.*./ 求余运算符:% 自增.自减运算符: ...
- iOS开发Swift篇—(五)元组类型
iOS开发Swift篇—(五)元组类型 一.元组类型介绍 1.什么是元组类型 元组类型由 N个 任意类型的数据组成(N >= 0),组成元组类型的数据可以称为“元素” 示例: let posit ...
- iOS开发Swift篇—(六)流程控制
iOS开发Swift篇—(六)流程控制 一.swift中的流程控制 Swift支持的流程结构如下: 循环结构:for.for-in.while.do-while 选择结构:if.switch 注意:这 ...
- iOS开发Swift篇—(七)函数(1)
iOS开发Swift篇—(七)函数 一.函数的定义 (1)函数的定义格式 func 函数名(形参列表) -> 返回值类型 { // 函数体... } (2)形参列表的格式 形参名1: 形参类型1 ...
- iOS开发Swift篇—(八)函数(2)
iOS开发Swift篇—(八)函数(2) 一.函数类型 函数类型也是数据类型的一种,它由形参类型和返回值类型组成,格式是 (形参类型列表) -> 返回值类型 func sum(num1: Int ...
随机推荐
- nodejs操作mongodb
一.下载地址 https://www.mongodb.com/download-center#community 二.控制台操作mongodb 1.安装完后添加环境变量. 2.在某个根目录下新建dat ...
- java类加载器-系统类加载器
系统类加载器 系统类加载器可能都耳详能熟,但是为了完整点,还是先简单的说说系统的类加载器吧. public class Test { public static void main(String[] ...
- path入门 20141102-1405
那Python有哪些缺点呢? 第一个缺点就是运行速度慢,和C程序相比非常慢, 第二个缺点就是代码不能加密. Python是解释型的 不是编译型的 Python解释器-CPython 命令行: 只需要在 ...
- Redis 集群方案
根据一些测试整理出来的一份方案(转自http://www.cnblogs.com/lulu/): 1. Redis 性能 对于redis 的一些简单测试,仅供参考: 测试环境:Redhat6.2 , ...
- HTML标签理解
基础回顾 1:<!DOCTYPE HTML> 这个我们都不陌生,它是文档说明,在html页面的第一行就写的是这个.在 html5中只有一个,大小写不敏感.是便于浏览器识别文档类型. 2:& ...
- STL : map函数的运用 --- hdu 4941 : Magical Forest
Magical Forest Time Limit: 24000/12000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Other ...
- winform自定义日期控件,要求可以手动输入日期DatePicker
要求:文本框中能手动输入数字,向上箭头根据鼠标位置给年月日递增,向下箭头递减 一:页面加载时: private void FlatDatePicker_Load(object sender, Even ...
- 15天玩转redis —— 第七篇 同事的一次缓存操作引起对慢查询的认识
上个星期同事做一个业务模块,需要将一个80M的数据存入到redis缓存中,想法总是好的,真操作的时候遇到了HSet超时,我们使用的是C#的 StackExchange.Redis驱动. <red ...
- windbg学习进阶之——windbg环境变量配置
接触性能调优以来一直想学下windbg分析dump,每次看老师几个命令就能找到很底层的问题原因那简直就是羡慕加崇拜啊~但是这接近一年了,愣是没啥进展呢,主要就是在今天整理的这部分卡住了...这理由找的 ...
- Android对话框自定义标题
Android自带的对话框标题不好看,如果我们需要给弹出的对话框设置一个自己定义的标题,可以使用AlertDialog.Builder的setCustomTitle()方法. 定义一个对话框标题的ti ...