浅谈Swift的入门

从语法上讲Swift非常华丽。它是一门非常简单、干净的语言,同时可读性也非常好,即使以现在的标准来衡量也是如此。你马上就会发现在设计一门语 言的时候简单性是一个关键要素。例如,大家所熟知的语句末尾的分号。苹果决定将分号作为可选的,虽然这看起来相关性并不是非常强,但是它却让我们看到了苹 果为了尽可能地保持语法干净所做出的努力。
你可能会将Swift中的泛型与Objective-C中的协议类比,虽然它们的语法非常相似,但是概念是非常不同的。Objective-C并不 支持泛型。协议提供了一种方式去声明一个确定的实现符合某个消息契约,但是契约必须预先指定。例如,使用协议你并不能强迫数组中的所有条目都是同一类型的 (无论是什么类型),但是使用泛型能够做到。除了概念上的不同之外,Swift并不支持协议,就像Objective-C不支持泛型一样。

下面简单性方面的其他例子包括字符串插入,以及语言对数组和循环处理的支持。

1.常量let和变量var

与OC不同Swift的类型只有let(常量)和var(变量)
使用常量let定义,不能重新赋值

let a = 10

let b = 20.1

//Swift 不支持隐式类型装换,不能让两个不一样的数据类型做四则运算
//Swift 强转的格式 : 数据类型 (需要强转的数据)

let c = Double(a) + b

//Swift支持隐式类型推断,可以根据初值,自动的判断Swift的数据类型
let b : String = "nihao"

//Swift也可以通过中文表情进行声明变量

let 明天 = "头么肉"

let 😢 = "哭"

//输出语句 
printf("hello word")

//定义两个字符串命名的常量
let a = "Hotlet"
let b = "Nihao"
Swift 里面支持运算符的重载,会根据语境自动判断运算符的含义
let c =  a + b(字符串拼接)

Swift里使用var定义一个变量(可修改的)

var a = 10
a = 100

//如果需要定义一个初值为nil的变量的话,格式:

var b : String? = nil //var + 变量名 + ":" + 变量类型 + ? = nil

2.数组

Swift数组里面的数据类型必须是一类的

let array = [1, 2, 3, "a"]//AnyObject Swift1.0版本,NSobject SWift2.0版本

//数组只能全是Int类型的
let array1 : [Int] = [1, 2, 3, 4]

//定义一个空数组
let array2 : [Int] = [];

数组的增,删,改,查

var array = [1, 2, 3, 4, 5]
var array1 = [11, 12, 13, 14]

1.数组里添加数组跟数据库的添加类似使用点语法

//如在array添加array1
//array.insertContentsOf(newElements: (要添加的数组), at: (在哪个位置添加))
array.insertContentsOf(array1, at: 3);

//数组的添加数组直接+(运算符的重载)
var array2 = [6, 7, 8, 9]
var array3 = array + array2

//添加元素
//array.insert(新元素, atIndex:添加到元素下标 )
//比如将10 添加到数组下标为2里
array.insert(10, atIndex: 2);

删除数据同时保存和不保存内存空间
Swift 中bool只有ture(真)和false(假)两种的参数
比如删除数组保留内存

array.removeAll(keepCapacity: true)

比如删除数组不保留内存

array.removeAll(keepCapacity: false)

通过下标删除

//首先需要定义一个ranger
let range : Ranger = Range(start: 0, end: 2)
array.removeRange(range)

改与查相同

直接通过数组下标就行

//将12改成101
array[1] = 101

3.字典

Swift的字典里 所有的key,所有的value都是必须同一种类型的
创建字典的两种方式

var dictionary = [1 : 2,3 : 4, "a" : "b"]//只使用Swift2.0

var dictionary1 : [Int : String] = [1 : "a" , 2 : "b"]
//字典的查找与访问通过点语法.indexForkey(key值)
print(dictionary.indexForKey(1))

字典的添加与修改一致都是通过key值

//比如有这个key值就是修改,没有的是添加
//dictionary[key值] = 赋过去的value
dictionary[5] = 9
//添加key 7 对应的value 8
dictionary[7] = 8

字典删除

dictionary.removeValueForKey(key值)

4.元祖

元组是非常简单的概念,你可以定义一个有序的值组。当你需要将多个值作为一个参数来回传递、或者被调用的函数需要返回多个值的时候元组会非常有用。

使用() 表示定义一个 元祖,元祖里面没有数据类型的概念
元祖也有下标

var type = ("Object","Swift")
// 访问元组的第一个方法
print(type.0)//输出Object

func info(items:[Int]) -> (avg:Int, min:Int, max:Int) {
   var sum = items.reduce(0, { $0 + $1 })
   var min = items.reduce(Int.max, { $0 > $1 ? $1 : $0})
   var max = items.reduce(Int.min, { $0 < $1 ? $1 : $0})
   return (sum / items.count, min, max)
}
 
var result = info([1, 2, 3, 4, 5, 6])
result.avg //3
result.min //1
result.max //6

5.结构

1.循环结构

通常循环结构在开发中常用的是for , while ,do while

for 循环在Swift中这样写
var array = [1, 2, 3, 4, 5]
//for循环
for var i = 0 ; i < array.count ; i++ {
 print("array = \(i)")
}

while 循环在Swift中这样写
//while 循环
//循环变量
var i = 0
while i < 10 {
print("i = \(i)")
//循环条件
i++
}
do while 循环在Swift中这样写

repeat while 和do while一样
Swift1.0 版本的时候叫do while ,Swift2.0版本 的时候叫做repeat

//repeat while循环(do while)
repeat {
i++
print("i = \(i)")
}while i < 10

for in 循环在Swift中这样写
let array = [1, 2, 3, 4, 5]
for var a in array{
print(a)
}
2.条件结构
if esle Swift 中的使用
//定义变量
var timer :String? = nil
//在oc中我们可以直接将
if(timer){
print("timer存在")
}else{
print("timer不存在")
}
}
//在swift中必须讲条件写出
if  timer != nil{
print("timer存在")
}else{
print("timer不存在")
}
枚举switch Swift 中的使用在

...代表的是如0...3 相当于 0到3 包含3
..< 10 代表的是 0 到 10 不包括10

//在Swift case中存在braeck
switch value {
case 0:
 print(value)
case 1:
 print(value)
default:
print("超了")
}
//这样写,case 0 到 10 之间,case 11 到 20 之间
switch value {
case 0...10:
 print(value);
case 11...20:
print(value)
default:
print("又超了")
}
//通过case的point 的元祖进行查询
let point = (10, 10)
switch point {
case (10, 10):
 print(point)
case ( _, 10):
print(point.0)
case ( 10, _):
rint(point.1)
case (_, _):
 print(point)
}

//case也可以加入where条件

let value = 0
let value1 = 100
switch value{
case 0 where value1 < 10:
print(value)
case 0 where value1 > 10:
print("正确")
default:
print("错误")
}
6.函数

无参数无返回函数
func(关键字) test(函数名) "()"(参数列表) -> Void(返回类型)

func test() -> Void{
print("我是第一个函数,无参无返回值")
}
test()

无参数有返回(在Swift分 单个返回值,多个返回值)

func test1() ->String{
return "我是第二个函数,无参有返回值"
}
//返回一个int类型的数组

func test2() ->Array<Int> {
return [1, 2, 3]
}

//返回一个OC的数组
func test3() ->NSArray {
return [1, 2, "a", "b"]
}

print(test2())
print(test1())

有参数有返回
参数格式参数名+ ":" + 参数类型

func test8(name : String , age :String) -> (String , String){
return (name , age)
}
let type1 = test8("大宝", age: "18")
print(type1.1)
print(type)
func test6(name : String ,age : String) -> (String , String) {
return (name , age);
}

func test6(dic : NSDictionary ) ->NSDictionary{
return dic;
}

无参数有返回(在Swift分 单个返回值,多个返回值)

//多个返回值需要通过元祖类型返回
func test7() -> (String ,String) {
return ("大宝" , "16")
}
let type = test7()
print(type)
print(type.1)

inout函数(新增)

Swift函数里面的参数 默认是使用let修饰符的,是不可以更改的
inout一般是通过函数的外面变量的值

func  test8(inout number : Int){
number = 100
}
var a = 5
test8(&a)
print(a

除了上面介绍的特性之外Swift还有很多其他的优秀特性值得我们一看,例如属性观察器、可选链接以及扩展。

我相信Swift具备快速成为一门流行的iOS和OSX编程语言所需要的所有必须条件,无论是在企业领域还是在消费者领域。强类型和类型推理特性将会让它非常适合于企业开发,而它的简单性和干净的语法则会吸引那些从事消费者项目的开发人员。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,277评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,777评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,946评论 0 245
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,271评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,636评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,767评论 1 221
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,989评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,733评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,457评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,674评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,155评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,518评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,160评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,114评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,898评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,822评论 2 280
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,705评论 2 273

推荐阅读更多精彩内容