一、变量、常量

1、Swift中分别使用let、var来定义常量与变量的。
2、Swift在定义常量或变量时,必须指定其数据类型。
格式:let a:Int = 10 (变量名 : 数据类型) 其含义是:定义了一个Int类型的常量,值为10,且不能做修改
注:Swift编译时,是通过空格或回车符来断句的,所以使用Swift语言书写的代码只要回车就行,不用以分号结束。
如果定义常量的格式为 let a = 10 其也可以执行,并不会报错,因为Swift语言会根据初始值自动推断出自己是什么类型的数据或常量(具备隐式推断的功能)
3、使用var来定义我们的变量,变量可进行重新赋值操作
如:var a = “lianxi"
       var b = “duoqiao"
以上分别定义了两个字符串类型的变量,那么我们如何来拼接它们呢?
       var c = a + b
Swift语言拼接字符串可以直接相加,它会隐式判断出你所要进行的操作,但是如果遇到两个不同数据类型的加减乘除的话,它会报错,其不支持隐式类型转换,必须提前进行显示转换成相同数据类型
     var d = 3
     var e = a + String(d)     //提前将Int类型的d显示转换成String类型
4、在定义变量的时候,在数据类型后面加?表示该变量可以为nil      例如:  var a : Int? = nil
5、在Swift中Bool类型是一个结构体,不是枚举,只有两种结果:ture 和 false ,所以不能通过以前的非0为真去判断Bool的真假
     var bool = ture
注:Swift中的变量输出为:print( \( 变量名 ) )

二、数组

1、Swift 中分别使用let和var去定义一个不可变的数组和可变的数组(使用[ ]来表示定义了一个数组)
数组的定义与定义常量和变量一样,有两种定义方式:1)定义初值,系统自动推断;2)变量后面加 :类型名
特别地:如果定义成:var array = [ 1,  2,  “a”]   根据系统特性:数组中的元素必须是同一数据类型的;那么系统推断的数组元素类型为NSObject
     var array : Array<Int> = [ 1, 2, 4]   //数组中的元素只能是Int类型的
     var array : [ Int ] = [ 1, 3 ,5 ]  等同于以上格式
2、数组跟C中的一致,也是通过下标来访问数组元素的
3、数组可通过相加来拼接数组,也可通过点语法来添加和移除数组元素(最后添加、指定位置添加、指定位置移除、移除全部元素)
4、数组里面添加数组元素

三、字典  (也是[ ]来表示)

1、定义字典格式: let/var 字典名 = [key : value, key : value ]
如果字典是通过定义初值的方法去定义,里面的key和value数据类型可以不相同
而字典通过指定类型来定义,里面的key和value数据类型不可改变
var dictionary : [ Sting : Int ] = [ “a” : 1, “b” : 2]
2、字典也可以创建一个可以为nil的字典,也是用?修饰
而通过?修饰的变量在使用的时候,必须在变量名后面添加!来进行拆包读取
dictionary![“a”] = 100    (通过key值读取并做修改)

四、元组 (Swift中新增类型)

元组定义时是用()来表示的
元组的元素可以通过下标定义和读取,也可以通过key/value定义和读取
元组定义时给定元素类型使用()
注:若果使用指定类型定义,元组里面的元素相同,也必须每个元素对应一个类型
它的读取与字典和数组不同,不用使用【】,而是直接使用点语法 :元组名 .下标  或 元组名 . key

五、分支语句

     if 判断与OC中的区别不大,有两点改变:1)条件可不用加括号;2)条件必须写全,如:bool == ture
     区间条件:…和..<
     …代表从0开始到最后一位,包含最后一位的值
     ..<代表从0开始到最后一位,但是不包含最后一位的值
     switch分支
     与OC中switch相比:1、每一个分支不用加break,系统会默认添加
                                       2、每一个分支都必须写东西,不能为空
                                       3、可以使用fallthrough来贯穿执行两个分支代码
                                       4、可以对一个区间条件进行匹配使用
                                       5、可以搭配一个元组一起使用(使用_来忽略某一个条件)
                                       6、可以使用where来作为判断条件

六、循环语句

     for; for…in ;   while; repeat…while(代替了do...while)
    基本语法与OC与类似,是有一点改变,条件的括号可以省略不写

七、函数

     Swift中的函数有以下几个不同于OC函数的特点:
     1、使用元组可实现有多个返回值的函数
     2、Swift中,一个参数有两个名字,内部参数名和外部参数名
         内部参数名:在函数内部使用的参数名称。
         外部参数名:在函数调用时候,显示的参数名称
     3、在函数内部是不能修改参数值的,因为它是默认使用let来定义的,如果需要修改,需要手动使用var来定义
     4、默认情况下,多参数函数的第一个参数名,不在外部显示,其他参数的外部参数名与内部变量名一致,如果不想让它们在外部显示,可以在定义参数名前加_来忽略外部参数名
     5、Swift中定义的函数里面还能定义函数(函数能够嵌套定义)
另外:inout参数:
1.参数默认是用let修饰,即常量
2.在参数前面添加var,就可以在函数内部修改参数的值,但不能改变实参变量的值.
3.如果参数使用inout来修饰,就成了输入输出参数,在函数内部修改参数,可以影响实参变量的值.
     函数只是一个格式的转变:各种代码格式如下:
  //Swift里面的函数是一个变量
//无参数无返回值 ( -> Void 可省略不写)
//定义函数的格式:
//func (关键字) test(函数名)(参数)->返回值类型
//{
//    函数体
//}
//如果没有返回值, -> Void 可以省略
func test() -> Void {
    print("我是一个无参数无返回值的函数")
}
//调用函数
test()

//无参数有返回值
func test1() -> String {
   
    return "a"
}
print(test1())

//返回一个OC的数组类型
func test2() -> NSArray {
   
    return [2,3, 4]
}
print(test2())

//返回一个Swift的数组类型
func test3() -> Array<NSObject> {
   
    return [1,2, "33"]
}

print(test3())

//Swift中可以返回多个返回值,其实就是返回一个元组
func test4() -> (String,Int,Int,Array<NSObject>) {
   
    return ("a",10,10, [1,2])
}
print(test4())

//有参数无返回值
func test5(name : String, age :Int) {
   
    print(name, age)
}

test5("你猜", age: 12)

//定义一个参数是数组类型的函数
func test6(people : Array<NSObject>) {
   
    print(people)
}
test6([1,2, 3, "33"])

//Swift中含有内部参数名和外部参数名
//下面的函数中 你好 是外部参数名
//           nicai 是内部参数名
func test7(你好 不好:String) {
   
    print(不好)
    print("你好不好")
}
test7(你好:"你也好")

//如果不想让外界知道你的外部参数名,可以使用_忽略掉外部参数名,每个参数都会自带一个外部参数名的,如果不写则和内部参数名一致
func test8(name: String, age :Int){
   
    print("name =\(name), age =\(age)")
}

//test8(<#T##name: String##String#>, age: <#T##Int#>)

//在函数内部是不能修改参数值的,因为每一个参数是默认使用let定义的
//如果需要修改的话,可以手动的使用var定义参数
func test9(var name : String) {
   
    name = "a"
}

//inout修饰的函参数,是var定义的,在使用的时候可以改变传进来的参数的值
func test10(inout name : String) {
    name = "韩一路"
}

var name = "过冬"

test10(&name)

print(name)

func test11(inout people : (String,String)) {
   
    let temp = people.0
    people.0 = people.1
    people.1 = temp
   
}

var since = ("100","500")

test11(&since)

print(since)

func test12(name : String, age :String) ->String
{
    let string = "我叫\(name),今年\(age)岁"
    return string
}

let string = test12("刘永杰", age: "25")
print(string)

func test13(people : (String,Int)) ->Array<String>
{
    return ["我叫\(people.0),今年\(people.1)岁"]
}

let array = test13(("刘永杰",25))
print(array[0])

//函数里面可以嵌套定义一个新的函数,可以无限地循环下去
func test14() {
    func test1() {
        func test2(){
           
        }
    }
    func test2() {
        func test1() {
           
        }
    }
   
}

test14()    

iOS开发Swift语法回顾之基本的语法与数据类型相关推荐

  1. 李洪强iOS开发Swift篇—02_变量和常量

    李洪强iOS开发Swift篇-02_变量和常量 一.语言的性能 (1)根据WWDC的展示 在进行复杂对象排序时Objective-C的性能是Python的2.8倍,Swift的性能是Python的3. ...

  2. iOS开发Swift语言学习教程-欧阳坚-专题视频课程

    iOS开发Swift语言学习教程-16345人已学习 课程介绍         Swift这套视频是针对有Objective-C/iOS基础,想转成Swift开发的学习视频,视频中从Swift语法,结 ...

  3. iOS开发Swift篇—(六)流程控制

    iOS开发Swift篇-(六)流程控制 一.swift中的流程控制 Swift支持的流程结构如下: 循环结构:for.for-in.while.do-while 选择结构:if.switch 注意:这 ...

  4. iOS开发 swift 3dTouch实现 附代码

    iOS开发 swift 3dTouch实现 附代码 一.What? 从iphone6s开始,苹果手机加入了3d touch技术,最简单的理解就是可以读取用户的点击屏幕力度大小,根据力度大小给予不同的反 ...

  5. pythonios脚本语言-iOS开发Swift篇—(一)简单介绍

    一.简介 Swift是苹果于2014年WWDC(苹果开发者大会)发布的全新编程语言 Swift在天朝译为"雨燕",是它的LOGO 是一只燕子,跟Objective-C一样,可以用于 ...

  6. iOS开发-Swift进阶之枚举enum!

    swift进阶总汇 本文主要介绍enum的常见使用形式,以及枚举大小是如何计算的 补充:添加脚本自动生成SIL 通过target -> +,选择 other -> Aggregate,然后 ...

  7. swift php 类型判断,iOS开发 - Swift实现检测网络连接状态及网络类型

    一.前言 在移动开发中,检测网络的连接状态尤其检测网络的类型尤为重要.本文将介绍在iOS开发中,如何使用Swift检测网络连接状态及网络类型(移动网络.Wifi). 二.如何实现 Reachabili ...

  8. iOS开发 - Swift实现清除缓存功能

    前言: 开发移动应用时,请求网络资源是再常见不过的功能.如果每次都去请求,不但浪费时间,用户体验也会变差,所以移动应用都会做离线缓存处理,其中已图片缓存最为常见. 但是时间长了,离线缓存会占用大量的手 ...

  9. IOS开发Swift——开发小知识(持续更新)

    如有错误,请指正!谢谢! 侵权删!(部分转载) 1.PHAsset获取本地视频的url PHCachingImageManager().requestAVAsset(forVideo: asset, ...

  10. iOS开发--Swift:布局库——SnapKit

    如果你是只从事过iOS开发,觉得使用SnapKit(OC中的Masonry)很方便,甚至xib拖拉也不错. 可以说,这些都是iOS开发稀疏平常的日常. 但一旦你学过Flutter/Vue写过UI组件, ...

最新文章

  1. AP付款出现(-1)例外处理
  2. ajax 传递数组参数
  3. openresty完全开发指南_送给你,PBA商业分析指南(全书下载)
  4. 方法重写(override)注意事项和使用细节
  5. 冒泡排序python例题_零基础学python 15 经典算法:冒泡排序法(课后习题答案)...
  6. 我们能用RNN写策略吗?
  7. vs2010编译curl为static库及测试
  8. Python语言入门教程(一)
  9. 使用js实现预览上传的图片
  10. mysql索引优化面试题_mysql索引优化面试题
  11. R语言学习笔记四:秩和检验
  12. Flume之生产正确的使用方式二(Multiple Agent+ Multiple Channel+Custom)
  13. Gcd HYSBZ - 2818
  14. ERP、APS与MES系统是什么?
  15. 关闭微信朋友圈和公众号的广告
  16. 计嵌 廖峻 20178303040 C++作业
  17. 制作微信H5互动小游戏如何确认主题?
  18. 免费Bootstrap后台管理模板
  19. 基于pymongo的学生信息考勤管理系统开发学习笔记之mongo篇
  20. 【转】48个诡异心理学

热门文章

  1. labuladong的算法小抄笔记
  2. asuswrt 单臂路由_我的软路由折腾-斐讯N1单臂路由设置
  3. 路由选择信息协议-RIP
  4. 为什么要用UML建模之建模的重要性
  5. 直播平台开发,防止直播过程中被截屏或录屏
  6. 2021WSB-day1-1 - 孙老师讲解生物特征识别的基础知识
  7. Self-training with Noisy Student improves ImageNet classification论文解析
  8. c# 第二节 c#的常用IDE环境
  9. d3 .each()
  10. 肚子好饿啊 早知道不约Java了_关于饿了的朋友圈说说大全2018 肚子饿肚子好饿肚子很饿...