swift学习第一天

量值与基本数据类型

量值:变量和常量

swift使用var和let分别声明变量和常量;

swift可以自动识别数据类型,所以可以不声明数据类型直接复制 ;

  • var a = 1, b = 2.9, c = "hello"
    变量可以用中文,表情符号命名
    但不能以数字开头命名
    一般使用驼峰命名法

数据类型

整型 :一般都是UInt(自动适配机器位数)

浮点型:一般是double

布尔型:true / false ;swift的条件语句和逻辑判断语句必须用bool型 ;

元组: 类似类的使用,是简单数据的组合体

swift 复制代码
//var people : (String, Int) = ("hello", 15) ;
//print(people.0) ;
//print(people.1) ;
//var (name, age) = people ;
//print(name) ;
//print(age) ;
var people : (name : String, age : Int) = ("hello", 15)
print(people.name) ;

对于复杂的数据,还是要使用类来实现

可选值类型:表示可能为nil

swift语言中,不允许直接使用为nil的数据;即使是进行nil判断的时候也不可以;

所以要使用?进行op封装 ;

swift 复制代码
//var age : Int? //进行了optional封装,可以用来判断是否为nil,如果不为nil,则可以通过!来解包
//if age == nil {
//    print("yes")
//}
//
//age = 15
//age!


var age : Int?
if let temp = age {//相当于把age拆包后的数据赋给常量temp
    print(temp)
} else {
    age = 18
    print(age!) //op封装后的数据,使用时要!拆包
}

op封装后可以进行nil判断;

但要使用数据的值的时候,要对op封装的数据进行!解包

swift 复制代码
var age : Int!
age = 16
print(age)

也可以在变量声明时使用!表示隐式解析;

但要注意的是(和书上讲的不一样):隐式解析只是系统假装认定你是自动拆包了的,但实际上直接使用的话还是可选值,还是需要去手动拆包调用。不然会有warn警告

为类型取别名

oc,c++,c使用typeof

swift使用typealias

swift 复制代码
typealias year = Int ;
var  age : year = 16 ;
print(age) ;

字符。字符串,集合类型

字符串类型

swift中的字符串类为String

swift 复制代码
var a = 80
var str = String(describing: a.self)
print(str)

通过String(describing: a.self)可以实现类型转换

String类型还对"+"进行重载实现,可以实现字符串的拼接

除了"+",也可以通过在字符串中使用()语法实现不同数据类型转换为String后拼接

swift 复制代码
var a = "hello"
var b = "world"
var c = a + b
var d = a + " " + b
print (c)
print (d)

var e = "hello \(b)"

字符类型

swift使用character类

swift 复制代码
var a : Character = "a" ;
var b :[Character] = ["h","e","l","l","o"] ;
var c = String(b) //可以通过字符数组创建字符串
var d = Character ("\u{21}") ;
for e in c {
    print(e)
}

for-in语法是重要的循环结构

转义字符


字符串类型的常用方法

swift 复制代码
var str = ""
//if str.isEmpty {//判断是否为空字符串
//    print("yes")
//}
//
//if str.count == 0 {
//    print("yes")
//}
//
//var a = "30a"
//var b = "31a"
//if a > b {//按位比较
//    print("yes")
//} else {
//    print("NO")
//}

str = "hello"
//var startIndex = str.startIndex ;
//var endIndex = str.endIndex ;
//print(str[startIndex], str[str.index(after: startIndex)], str[str.index(before: endIndex)]) ;
//var str01 = str[startIndex...str.index(startIndex, offsetBy: 3)]
//var str02 = str[str.index(endIndex, offsetBy: -3) ..< endIndex]
//print(str01, str02)


var range = str.ranges(of: "ell") ;
str.append(" world")
str.insert("!", at: str.index(str.startIndex, offsetBy: 5)) ;
str.insert(contentsOf: ["O", "H"], at: str.index(str.startIndex, offsetBy: 5))
str.replaceSubrange(str.startIndex...str.index(str.startIndex, offsetBy: 5), with: "KK") ;
str.remove(at: str.index(str.startIndex, offsetBy: 7))
print(str)
str.removeSubrange(str.startIndex...str.index(str.startIndex, offsetBy: 3))
str.removeAll() ;

var str01 = "hello woeld"
var str02 = str01.uppercased() ;
var temp = str01.hasPrefix("he") ;

数组类型

Array类;

声明:

swift 复制代码
var array : [Int]
var array01 :Array<Int>

创建数组:

swift 复制代码
array = [1,2,3]
array01 = Array(arrayLiteral: 1,2,3) ;

空数组不为nil

含有大量重复元素数组的创建:

swift 复制代码
array02 = [String] (repeating: "hello", count: 5) ;
array02 = Array(repeating: "b", count: 3)

数组可以相加:

swift 复制代码
array02 = [] ; //想要创建空数组,要先对数据类型进行声明
array = array + array01

数组的常用方法:

swift 复制代码
array = [1, 2, 3, 4, 5, 6, 7, 8, 9]
array.count
array.isEmpty
array[0]
var array03 = array[0 ... 4]
print(type(of: array03))//这里的array03的类型不是array[Int},而是ArraySlice<Int>
var a = array.first
var b = array.last
array[0] = 0 ;
array[0...3] = [2, 2, 3, 4] ;
print(array)
array.append(10) ;
array.append(contentsOf: [25, 67])
array.insert(100, at: 2)
array.remove(at: 2) ;
array.removeFirst() ;
array.removeLast() ;
print(array) ;
array.removeFirst(3) ;
array.removeLast(3) ;
//array.removeSubrange(0...2)
array.replaceSubrange(0...2, with: [0, 1, 2])
if array.contains(2) {
    print("yes")
}
array.removeAll()

for-in循环:

swift 复制代码
var array01 = [0, 1, 2, 3, 4]
var array02 = [(1,2),(2,3),(3,4)]
for a in array01 {
    print(a)
}

for b in array02 {
    print(b)
}

for c in array01.enumerated() {
    print(c)
}

for d in array02.indices {
    print(d)
}

数组排序:

swift 复制代码
var array = [1, 3, 2, 8, 4] ;
array.sort()
array.sort(by: >) ;
array.max()
array.min()

集合类型

Set,一个无序的集合 ;

swift 复制代码
var set : Set<Int> = [0, 2, 5, 7] ;
set.count
set.isEmpty
set.contains(2)
set.max()
set.min()
set.insert(10)
set.remove(2)
print(set)
set.removeAll()

没有replace和append ;

swift 复制代码
var set01: Set<Int> = [0, 6, 3 ,4]
var set02: Set<Int> = [2, 5, 3, 1]
set01.intersection(set02)//交集
set01.symmetricDifference(set02)//交集的补集
set01.union(set02)//并集
set01.subtracting(set02)//补集
set01.isSubset(of: set02)
set01.isSuperset(of: set02)
set01.isStrictSubset(of: set02)
set01.isStrictSuperset(of: set02)

for a in set01 {
    print (a)
}
for b in set01.enumerated() {
    print(b)
}
for c in set01.indices {
    print(c)
}
for d in set01.sorted(by: <) {
    print(d)
}

集合虽没有顺序,但可以排序后遍历

字典类型

创建字典:

swift 复制代码
var dict :Dictionary<Int, Int>
dict = [2: 3, 3: 4, 4: 5]
var dict01: Dictionary<Int, Int> = [:] ;

常见用法:

swift 复制代码
dict.count
dict.isEmpty
dict[2] = 8
dict.updateValue(10,forKey: 1)
print(dict.updateValue(9, forKey: 3)!)
dict.removeValue(forKey: 4)
for a in dict.keys {
    print(a)
}
for b in dict.values {
    print(b)
}
for c in dict {
    print(c)
}
for (key, value) in dict {
    print(key , value)
}
for d in dict.keys.sorted(by: <) {
    print(d)
}
for (key, value) in dict.sorted(by: <) {
    print(key , value)
}
    

注意和书上不一样的地方:updateValue方法即使键不存在,也会创建新的键值对 ;

排序默认是key排序

相关推荐
培林将军21 小时前
C语言指针
c语言·开发语言·算法
云栖梦泽21 小时前
鸿蒙分布式应用全链路性能调优实战
开发语言·鸿蒙系统
wdfk_prog21 小时前
[Linux]学习笔记系列 -- [fs]namespace
linux·笔记·学习
L.fountain21 小时前
图像自回归生成(Auto-regressive image generation)实战学习(四)
人工智能·深度学习·学习·数据挖掘·回归
yongui4783421 小时前
基于卡尔曼滤波的电池荷电状态(SOC)估计的MATLAB实现
开发语言·算法·matlab
yuan199971 天前
H264视频压缩matlab帧内预测帧间预测熵编码
开发语言·matlab
aini_lovee1 天前
基于MATLAB GUI的信号处理系统设计与实现
开发语言·matlab·信号处理
托尼吴1 天前
milvus 向量数据库学习笔记-基础认识
数据库·学习·milvus
kylezhao20191 天前
C#上位机实现权限管理
开发语言·c#