Swift

Posted J_维他命_M

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swift相关的知识,希望对你有一定的参考价值。

一、Swift简介

2010年的夏天,苹果公司的开发人员 Chris Lattne 接到了一个特别的任务,为OSX何ios平台开发下一代的编程语言,也就是Swift。

苹果公司于2014年WWDC(苹果开发者大会)发布的新开发语言Swift,可与Objective-C共同运行于Mac OS和iOS平台,用于搭建基于苹果平台的应用程序。

2015年的WWDC开发者大会上,苹果公司推出了Swift2.0版本,并且Swift完全开源。

自从Swift发布以来,在http://www.tiobe.com中的排行一直处于上升的状态。

在Swift中使用"let"修饰一个常量,使用var修饰一个变量

let修饰常量的值是不可以更改的;
var修饰的变量的值是可以更改的;

在声明常量和变量的时候可以使用表情符号、中文等命名常量名和变量名。

Swift定义变量或者常量的时候,需要标识出变量或者常量的类型,如果不标识,会根据初始值自动推断,
如:
//会自动推断变量a为Int类型
var a = 10
//会自动推断常量b为String类型
let b = "Hello"

Int、 Float、Double、String、Charater(字符使用双引号,但是里面只能放单个字符);

例如:
let a:int = 10
let b:Srting = "Hello"
let c:Character = "A"
let flag:Bool = false
注意:值永远不会被隐式转换为其他类型:如果你需要把一个值转换成其他类型,请限式转换

let name ="Lanou‘s age is‘‘
let age = 3

let words = name +String(age)

字符串

1、String是有序的字符集合,例如"Hello 蓝鸥"
2、Swift中的字符串通过String类型表示,当然也可以看成Character字符类型的集合

(1).//定义字符串变量

var var_str = "Hello 蓝鸥"

(2).//创建空String变量

//这两个字符串都为空,并且两者等价

var empty_str1 = ""
var empty_str2 = String()
(3).//通过字符串对象的isEmpty方法判断是否为空

if empty_str1.isEmpty {
print ("‘empty_str1 is empty
")
}
(4).//字符串连接
//创建字符串变量

var var_str = "http://"
//字符串拼接后,var_str = "http://www。lanou3g.cm"

var_str += "www.lanou3g.com"
注意:let con_str = "hello"常量不能被修改!!

(5).//创建字符串常量

let con_str = "Hello"
//获取字符串的长度

let length = con_str.characters.count

(6).//字符串插值
let mul = 3.0

let content = "\(mul)x2.5 = \(mul*2.5)"

(7.)//字符串比较

let name1 = "xiaohao"

let name2 = "lanou3g"

if name1 == name2
print("\(name1)equals\(name2)")

else {
print("not equal")
}

 

//Swift中导入系统库使用import,不再使用<>了,(或者不在使用""了)
import Foundation


//Swift中输出语句:print
print("Hello, World!")

//MARK:- 定义常量.变量

//定义常量 (使用完第一次就不能修改它的值了)

let myGender = "男"

//定义变量
var carName = "BMW"

carName = "Audi"

print(carName)

//MARK: - 定义常量变量:变量类型的隐式转换

//在Swift中如果定义常量变量不给定现骨干那的类型,它会隐式转换成你给定的初始化值类型
let name = "Jet"//如果这样子定义出来一个常量,它会隐式转换成String类型

let name1 : String = "Yue"  //如果给定类型,后边赋值的时候需要根据类型进行赋值


let age : Int = 18 //如果定义常量最好给出初始值,定义常量可以不给初始值

var age1 : Int? //?表示age1的类型为可选类型,其值可以为空

print(age1)

//定义一个字符类型的变量

var flag :Bool = true;

//MARK: - 字符串string

//(1)创建一个空的字符串


var str_empty = ""
var str1_empty = String()




//(2)判断一个字符串为空字符串

if str_empty.isEmpty {
    print("str_empty is empty");
}

//(3)字符串的拼接

var str_url = "http://"

var str = "www.baidu.com"


let str_new_url = str_url + str


print(str_new_url)


print("百度网址:/(str_new_url)")// \(变量名)输出相关的内容[插入式取值]



// (4)获取字符串的长度

var str1 : String = "abcdef"


print(str1.characters.count)


//(5)字符串的比较

var str2 = "MBBoy"

var str3 = "GBLW"

if str2 != str3 {
    //==
    print("两个字符串不相等")
}


//MARK: - 数组

//Swift中数组中的元素类型必须相同

//定义一个数组


var nameArray = ["yuanyuan","GBLW","WYW"]

print(nameArray)


var nameArray1 : Array<String> = ["YaQian","XiaoQiang","FatZhou"]


//定义一个空数组 (字符串)


let array = Array<String>()

print(array)

//访问数组中的元素

var int_aray = Array<Int>()

int_aray.append(520)

int_aray.append(234)

print(int_aray)

//使用运算符添加数组元素

int_aray += [100]

int_aray += [120]

print(int_aray)

//使用运算符添加多个数组元素


int_aray += [800,900,1000]

print(int_aray)


//插入元素具体的位置

int_aray.insert(521, atIndex: 1)


//移除某个元素

int_aray.removeAtIndex(4)
print(int_aray)


//移除所有元素

int_aray.removeAll()

print(int_aray)

//MARK: - 字典


//定义一个字典类型的变量

var dic : Dictionary<String,Int> = ["a":18,"b":69,"c":38]

print(dic)
//定义空子典

var dic2 : Dictionary<String,Int>  = [:]
var dic1 =  Dictionary<String,Int> ()

//往字典中添加键值对

dic["d"]  = 10

print(dic)


//修改字典中的内容 (根据键去修改值)



dic["a"] = 20


print(dic)


print(dic["a"])

//删除字典中的内容(根据键去删除)


dic.removeValueForKey("b")


print(dic)


//MARK: - 元组



//方法一:直接初始化一个元素(使用swift隐式转换的特点)

let tuples = ("蓝鸥1班",["iOS","html5","android"])

print(tuples)


//方式2:显示初始化的方式

let tuplesNew :(String,Array) = ("蓝鸥8班",["iOS","HTML5","Android"])


//取出元组中的值

//地址-中取值方式:直接把元组赋值给另外一个常量,根据相关标记进行取值


let tuplesNew1 : (classroom:String,course:Array) = tuplesNew


let classInfo = tuplesNew1.classroom + tuplesNew1.course[0] + tuplesNew1.course[1] + tuplesNew1.course[2]


print(classInfo)

//第二种方式直接根据下标取值

var classInfoNew = tuplesNew1.0 + tuplesNew1.1[0] + tuplesNew1.1[1] + tuplesNew1.1[2]
print(classInfoNew)


//MARK: - 循环

//第一种形式

for var i = 1; i < 10; i++ {
    print(i)
}
//第二种形式
for number in 1..<10 {
    print(number)
}

//第三种形式

for number in 1...10 {
    print(number)
}

//while循环和repeat...while


var i = 8

while i < 0 {
    i--
    print(i)
}



repeat { //先执行一次循环体,再进行相关的循环
print("爱你们")

}while i<0


//使用循环遍历数组

var animalArray = ["dog","pig","cat","tiger"]

for animal in animalArray {
    print(animal)
}
//使用循环遍历字典

var animalDic = ["dog":"??","pig":"??"]


for (key,value) in animalDic {
    print("key = \(key),value = \(value)")
}

//MARK: - 分支结构 (if结构和switch格式)


//if形式的
let flag1 = true

if flag == true {
    print("我是真的真的爱你")
}else {
    print("你们...")
}

//switch形式使用fallthrough实现贯穿每种可能

let value = 0

switch value {
case 0:
    print("0")
    fallthrough
case 10:
    print("10")
    
    fallthrough
    
default:
    print("other")
    
}

//特点二:case后可以使用一个范围


switch value {
case 0..<10:
    print("输出0-10之间的数值")
case 10...1000:
    print("输出10...1000的数值")
default:
    print("other")
}

//特点3:case 后可以使用(let var 修饰的常量或者变量)

switch value {
case var i where value >= 0 && value < 6:
    i = 99
    print(i)
default:
    print("other")
}

//特点4:case后还可以匹配一个元组

let point = (10,10)


switch point {
case (10,0):
    print("11111")
    
case(10,8):
    print("22222")
    
case(_,10)://_代表忽略某个元素
    
    print("33333")
default:
    print("other")
    
}

//Mark: - 枚举(enum)

//枚举原始类型为int类型的

enum Direction:Int {
    
    case east = 0
    case south = 1
    case west = 2
    case north = 3
    
    
}

print(Direction.east.rawValue) //rawValue 就是找到相对应枚举的原始值

//枚举原始类型为String类型的


enum Season :String {
    case spring = "春天"
    case summer  = "夏天"
    
    case autumn = "秋天"
    
    case winter = "冬天"
}


print(Season.autumn.rawValue)


//根据原始值获取枚举的类型

print(Direction(rawValue: 2))


//MARK: - 函数

//表示函数的关键字:func

//函数的类型有:四种

//1.无返回值,无参数

func function1() ->Void {
    print("无返回值,无参数的")
}

function1()


//2:无返回值,有参数

func function2(name str:String) ->Void {
    print(str)
}


function2(name: "lanou")

//有返回值,无参数

func function3 () ->String {
    return "炸天"
}


print(function3())


//4.有返回值,有参数

func function4(num1:Int,num2:Int) ->Int {
    return num1 + num2
}


print(function4(5, num2: 6))


//函数的返回值为元组类型的

func function5(num1:Int,num2:Int) ->(Int,Int,Int) {
    return(num1 + num2 ,num1 - num2 , num1 * num2)
}



print(function5(9, num2: 2))



//外部参数和内部参数


//first,second 就叫做外部函数:在函数调用的时候,会显示出来这两个名称


//one、two内部参数:在函数内部使用的

//默认的情况下,第一外部参数在调用的时候不显示,其余的均显示,而且和你定义的名字一样

func function6(first one:Int,second two:Int) {
    print((one,two))
}



function6(first: 10, second: 2)


//如果都不想显示外部参数


//“—”的作用是忽略外部参数名

func function7(one:Int,_ two:Int) {
    print("忽略外部参数")
}


function7(8, 9)




//函数的嵌套

func test () {
    func test2 () {
        func test3 () {
            print("哈哈,我穿了好多衣服")
        }
        test3()
    }
    test2()
    print("??,好有意思啊")
}
test()


//inout修饰的参数

/*
func test(inout name:String) {
    
    name = "MBBoy"
    
    
}

var myName = "yuanyuan"

print("myName:\(myName)")

test(&myName)


print(myName)


*/


func admin (var name:String) {
    name = "MBBoy"
    
    print("nameOld = \(name)")
}

var myName = "tianxin"

admin(myName)

print("myName = \(myName)")

  

以上是关于Swift的主要内容,如果未能解决你的问题,请参考以下文章

如何将这个 Objective-C 代码片段写入 Swift?

如何使用 Swift 使用此代码片段为 iOS 应用程序初始化 SDK?

Swift新async/await并发中利用Task防止指定代码片段执行的数据竞争(Data Race)问题

Swift新async/await并发中利用Task防止指定代码片段执行的数据竞争(Data Race)问题

swift 为什么我们有一个片段。我认为这有助于我们在另一个页面中有一个代码。

swift BaasBox和Swift的片段 - 第2部分