Swift学习-基础的语法

      励志作为iOS的开发人员,尽管写代码的时候不会专门的挑选Swift语言,但是肯定都会熟悉Swift这个名字,楼主表示从刚开始学习objc的时候就对Swift这个名字很感兴趣,感觉很高大上,但是从很多博客上也相应的看到相关文章,不得不说,Swift必将成为以后iOS开发的主流,尽管每次更新,Swift语言都会有比较大的更新,但不能代表就不了解他,闲话不多说,想了解Swift的历史可以去百度,今天聊聊关于Swift的那点小基础,这里如果有一点点C++/Java/PHP的基础的话,类比了解起来会更容易,毕竟Swift是集合了许许多多的语言的优点。


定义变量


首先第一步必然先熟悉如何定义变量,Swift语言楼主学的时间不是很长,基本是靠类比进行学习的,所以语言不是很准确,以后有更深的了解,必然会在这里修正

定义变量首先会有两个关键字 let (不可变)与 var(可变)

有什么区别呢,如其名字,let关键字定义的属性是不能修改的,var的变量是可以修改的,文字表述可能会比较无聊,代码来解释一下吧
var stringBo:String = "RunIntoLove";//后面的引号可以不加,Swift允许,但是楼主比较习惯了
let string1Bo:String = "Run";

//进行修改值
stringBo = "Yue";
string1Bo = "Yue";//会出现报错-Cannot assign to value:'stringBo' is a 'let' constant ,就是说不能改变他的值,因为他是一个let类型的变量

那么变量名字后面的:以及后面的String是什么呢,Swift依旧保持特色,这就是他的定义变量的类型,stringBo:String 表示一个变量的名字叫做stringBo,类型是String
var stringBo = "RunIntoLove";//Swift会自动的根据后面的类型,判断stringBo的类型,所以可以不写类型
var string1Bo:String; //这样子是定义了一个字符串String类型的变量
var int1Bo:Int = 10;//这样子是定义了一个整型Int类型的变量
var string2Bo;//这里会报错,如果不直接赋值,那么后面的类型是不可以忽略的,会报错-Type annotation missing in pattern 类型描述缺少类型

数字型:Int,Double

在Swift中的类型开头都是大写的,不同于C/C++,但这也不影响使用,毕竟objc的风格也是如此,这里只说一下他的特点
//数字
var u:Int = 00010_000_000;//var u = 10000000 || var u = 10_000_000.0 这三种写法是一样的

var d:Double = 10.2;

var o = Double(u) + d;//在Swift中,不同类型的属性不能进行运算,要想进行运算,必须强制转换成相同的类型,这个时候o的值就是10000010.2

字符串:String

字符串在Swift中的用法更加灵活,比如两个字符串连接,只需要用"+"连接即可,这点是综合了C++/Java的用法,毕竟是好处嘛
var firstName:String = "RunInto"
var lastName:String = "Love"

//字符串的连接
var name:String = firstName + lastName

元组:

       元组是Swift中比较新的类型了,但是第一次看到元组的时候比较亲切,后来想了想第一次接触元组是在大学中的离散数学,它是一种能够存多种值的结构,这东西不需要定义类型,就能存储多种数据,但是有很好用,语言不能表达,为什么会有元组呢,因为Swift的函数是可以有多个返回值的,接收的时候自然会用元组来接收,用代码更好的说明下:
//定义元组

var postion = (name:"YueWen",age:22);//定义一个元组,这种定义法类似一个结构体

var person:(String,Int) = ("YueWen",22);//可以提前声明类型

var (z,m) = ("yuewen",18);//通过元组给其他元组赋值
var point2 = (name:z,age:m);


//取值
var name_1 = postion.name//与name_1 = postion.0等价
var age_1 = postion.age//与age_1 = postion.1等价

var name_2 = person.0//通过小标进行取值,类似与数组了
var age_2 = person.1

语句控制

if...else

在Swift的if-else语句中,不同的还是有的,它不允许在()里进行隐形判断,必须是显性的。
什么叫隐形呢,比如在objc中
NSInteger i = 1;

if(i)//如果i为真,报错-Type'Int' does not conform to protocol 'BooleanType'
{
    //coding..
}

这个样子在objc中允许,他会自动的将1转成YES,将0转成NO,但是Swift中上面的语法是错误的.如果想正确,必须变成显性的判断
var number:Int = 1;

if(numbe1 == 1)//如果number = 1
{
    //coding...
}

for循环

for循环没有什么较大的改动,依旧有最基础的,也有for-in循环,如下
//定义一个数组
var numberArr = [90,85,47,52,36,"123"]//这里数组比较特别,里面的数据不仅限于一种类型,比如这里的数组存的就是Int类型的数据以及String类型的数据

//循环遍历
for s in numberArr
{
    print("number = \(s)")//在iOS_9.0之后,print替换了println,println已经被废除,写的话会报错
}

//普通for循环
for (var i = 0; i < numberArr.count; i++)//Swift中调用方法废除了[],选用了. 这点与大多数的编程语言相同了
{
    var s = numberArr[i]
    print("打印出的变量为\(s)")//print 代替 println,打印的形式只需要加一个\(需要打印的内容)即可
}


do-while循环 - repeat-while循环  iOS9之后用repeat替换do

依旧通过便利上数组来举例
//do while循环
var k = 0

repeat//iOS9.0之后用repeat代替了do
{
    var s = numberArr[k]
    print("do while 循环打印出的变量是\(s)")
    k++
}while(k < numberArr.count)

while循环

//while循环
var k1 = 0;
while(k1 < numberArr.count)
{
    print("while 循环打印出的变量是\(numberArr[k1])");
    k1++ ;
}

Switch语句

switch语句变动还是比较大的,因为在objc以及其他的语言中,每次case完毕之后都需要在后面加一个break,不然会穿透到下一个case语句,但是在switch语句中,不需要加break,默认不穿透,需要穿透的事后只需要加 fallthrough 关键字即可
//switch
let iso = "iOS"
switch iso//switch后面的变量可以使字符串,不仅仅只限于数字了
{
    case "iso":
        print("iso 为 iOS")
    //break 可以省略,swift不穿透
    //穿透需要加 fall through,加上这一句就是说执行完这句话之后会继续执行case:"Android"
    
    case "Android":
        print("iso 为 Android")
    
    case "JS":
        print("iso 为 JS");
    default:
    print("最后了")
    
}

函数

函数形式发生了变化,声明方法以及函数,用func关键字,返回值不再存在与函数之前,而是用放在 ’ -> ‘之后,如果返回值为Void,可以省略

无返回值无参

func testFunction()
{
    print("测试方法!")
}

有一个参数没有返回值

//带参的函数
func testFunction(s:String)
{
    print("参数是\(s)")
}

如果想真正的修改参数值,用inout关键字

这句话是什么意思呢,就是说当做参数放到函数中,无论在函数中对该参数进行任何的操作,原来的实参是不变的,加上inout关键字就相当于C语言的指针,C++的引用&,里面对参数的更改实际上就是修改的实参
func testFunction0(inout s:String)//表示实参可以改变,改变之后参数也会发生变化,类似C++的引用
{
    s = "Run";
    print("参数是\(s)")
}

var s:String = "RunIntoLove";
testFunction0(&s);//在执行完毕这一句话之后,s就变成了Run

带多个参数,无返回值

//带多个参数的函数
func testFunction(s:String , i:Int)
{
    print("我的参数是\(s),\(i)")
}
testFunction("RunIntoLove", i: 5)


返回一个返回值的函数

//返回值函数
func testFunctionF(v1:String, andVaule v2:Int, andNumber v3:Int) ->String//逗号不要丢
{
    return "\(v1)\(v2)\(v3)"
}
var string = testFunctionF("RunIntoLove", andVaule: 10, andNumber: 8)
print("返回值参数是:\(string)");//返回值参数是:RunIntoLove108

返回多个返回值的函数

//无参 返回3个值,但是需要用一个元组接收
func testFunction123() ->(String ,String ,String)
{
    return ("RunIntoLove","Study","Swift")
}
//用元组接收
var (name1,action,target) = testFunction123()
print("\(name1) \(action) \(target)");//RunIntoLove Study Swift

函数嵌套函数-一般人不建议用

//函数嵌套函数
func testFunctionInFounction() -> Int//返回值类型为Int
{
    var y134:Int = 100
    
    //方法可以嵌套方法
    func add()
    {
        y134 += 5  //可以用外部的变量
        y134++  //变量与++之间不能有空格,不然编译器会报错
    }
    //执行方法
    add()
    return y134
}

var number12 = testFunctionInFounction()
print("number12 = \(number12)")//number12 = 106


闭包_Closure-objc的Block

如果之前了解了objc的Block代码块就很好理解了,就是说在参数的位置放置一个函数,将方法的函数当做一个参数来用
通过一个简单的例子来看,写一个数组,如果里面有大于100的就返回true,否则返回false: Swift的Bool类型只有True或者False
首先定义一个数组
var arrInt = [80,12,45,789,85,63,110] //定义一个数组

接着写一个用闭包完成的方法,用来完成该项功能
func hasClosureMatch(arr:[Int],value:Int,function:(num:Int, value:Int)-> Bool) ->Bool//参数的方法参数有两个,一个数字,一个参考数字,返回值为bool, 外部大的方法的参数为 一个Int型的数组,参考值,以及一个闭包
{
    //开始遍历数组
    for item in arr
    {
        //使用参数中的函数
        if(function(num:item, value:value))
        {
            return true
        }
    }
    
    return false
}

调用该方法
//定义个方法,查找arr里面是否有比100大的数
var v1 = hasClosureMatch(arrInt,value:100,function:
{
    (num:Int,value:Int) -> Bool in
    return num >= value //当该数字num大于参考值value的时候返回sure,否则返回false
})//打印结果为ture,因为110大于100


闭包相对于比较难理解点,不过结合Block会简单很多。

Swift 因为基础类型都有Array,Dictionary,String,且功能都比较强大,楼主有疑惑,什么时候用NSArray等对象,什么时候用array类型,如果有明白的人,麻烦请告诉一下楼主,十分感谢.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值