重拾Swift第一天 基础语法

作者: QJK | 来源:发表于2016-04-11 19:55 被阅读141次

呃,为什么说是重拾呢,其实很早之前就接触过Swift,但是那时候还是1.x的版本,就记得!和?满天飞,看了下语法写了小项目,结果头昏脑涨,又转回OC了。

前几天忽然看到google考虑把Swift应用于开发安卓,不管是不是谣言吧,起码Swift发展速度相当之快,于是决定把Swift重新捡起来。

今天看了看基础语法,和记忆中差别还是挺大的。顺手写了个小项目,功能很简单,输入数字排序,可以快速排序也可以冒泡排序,一边结合项目一边熟悉语法吧。
编写时很多还是OC的思维,慢慢转变吧。
首先看下基本结构


首页是个UITableViewController,两个cell,快速排序和冒泡排序,点击cell进入DetailController,输入数字按排序按钮进行排序。
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    var cell = tableView.dequeueReusableCellWithIdentifier(reuseIdentifier)
    if cell == nil
    {
        cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: reuseIdentifier)
    }
    let str=dataArray[indexPath.row]
    cell?.textLabel?.text=str
    return cell!
}

首先我们看这一段代码,基本都能看出来就是创建cell的方法
在Swift中,常量用let,变量用var
cell最后为什么有个号呢,这涉及到Swift中可选类型的概念。
使用可选类型(optionals)来处理值可能缺失的情况。可选类型表示:

  • 有值,等于 x
    或者
  • 没有值

其实很容易理解,一个对象可能因为种种原因没有创建成功或者没值,就是nil,OC中向nil发送消息不会报错,但这也不是我们希望看到的。Swift中的可选表示它可能有值也可能没值,我们既然都要return一个cell显示出来,那么cell应该有值,所以我们用!告诉编译器这个cell一定有值,称之为强制解析

  lazy var dataArray:[String]={
    return ["快速排序","冒泡排序"]
  }()

OC里有懒加载的概念,Swift中也有。
Swift中懒加载的关键字是lazy,非常直观好记,但这里有个注意点,你必须使用var关键字来定义延迟加载的属性,不能使用let关键字,因为常量必须在实例构建时赋值。
后面则是一个闭包,相当于block。闭包比较复杂,可以学习一下
闭包
反正这里的意思就是返回一个数组。

 /**
 选择排序要使用的方法
 
 - parameter title: 控制器标题
 */
func chooseSortFunction(title:String){
    switch title{
    case "快速排序":
        sortManager.quickSort(&numbers, left: 0, right: numbers.count-1)
    case "冒泡排序":
        sortManager.bubbleSort(&numbers)
    default:
        print("other")
    }
}

这里注意一点,当匹配的 case 分支中的代码执行完毕后,程序会终止switch语句,而不会继续执行下一个 case 分支。

/**
 快速排序算法
 
 - parameter numbers: 数组
 - parameter left:    左标
 - parameter right:   右标
 */
func quickSort(inout numbers:[Int],left:Int,right:Int)
{

如果你想要一个函数可以修改参数的值,并且想要在这些修改在函数调用结束后仍然存在,那么就应该把这个参数定义为输入输出参数
定义一个输入输出参数时,在参数定义前加 inout
关键字。
大概注意点就是那么多了
代码参见这里

相关文章

本文标题:重拾Swift第一天 基础语法

本文链接:https://www.haomeiwen.com/subject/vfpilttx.html