栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

swift中文文档(swift 函数)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

swift中文文档(swift 函数)

前言

在学习java 数据结构时使用在线的动态模型演示不方便。(https://www.cs.usfca.edu/~galles/visualization/Algorithms.html)
由于使用的是mac 电脑 特此学习 swift 为方便后续开发各种桌面工具。

//基础数据类型:
int float double bool character(char 单个字符) string

// 变量常量:
var a = 1 // 变量
let b = 1 //常量

//制定类型与类型推断
var a = "你好" // 类型推断 
var b:String = "我也好" // 制定类型(类型首字母必须大写)

//判断数据类型
var str = "xxxx"
type(of:str)

// 控制台输出
print(item:Any...) // 接受一个任意类型的可变参数
print(str)
print(str,str1)

// 字符串拼接
let s1 = "一只"
let s2 = "小白兔"
var s3 = s1 + s2; // "一只小白兔"
var s4 = "(s1)(s2)(s3)" // 一只小白兔一只小白兔

var s1 = "中国"
var s2 = "china"
s1 += s2
print(s1) // 中国china

// 类型别名  和 typdef 一样 
typealias number8 = Int8
typealias number16= Int16

// 类型转换  转换失败返回 nil(null)
var a = 1
var b = "1"
var c = b + String(a)
print(type(of:c))// String

// ?? 语法 空置合并 前面有值就用前面 否则用默认值
var x = "asdf"
var k = Int(x) ?? 10 // 转换失败 返回10 
print(k) // 10

// OPtional() 可选类型(不确定是否有值)  ≈ Integer a = null
var a:Int? = 123 
var b:Int? = nil;
print(a) // Optional(123)
// ! 语法 取出 OPtional() 的真值 
print(a!) // 123
print(b!) // 空值会抛出异常 

// 元组 不同类型放在一起的数组 ≈ Object[] obj = {1,"2",1.3};
var a = ()// 空元组
var a:(Int) = () // 会抛异常 不允许指定了类型不设置值
var a = (1 , 1.2)
var a:(Int,String) = (1,"123")

// 可以设置属性名称
var a:(arg0:String,arg1:Int) = ("hello",1)
var a = (arg0:"hello"marg1:"word") 
// 元组取值
print(a.0) // 去下标 0 
a.1 = 10 // 赋值下标 1

a.arg0 = " " // 赋值 属性

// 元组传递 值传递 不是引用
var a = ("hello","world",true)
var b = a
b.0 = "123"
print(a) // ("hello","world",true)
print(b) // ("123","world",true)

// 基础运算符
// 注意:swift 没有 ++(自增) --(自减) 运算符
 + - * 、 % < >  =  >= <= !=  && ||  ?? 三元运算符 += -= *= /= 
 == === !==  & | ! ~ ^  >> << 

// 区间运算符 主要配合 for循环使用
1...5  // 区间值为 1 2 3 4 5
1..<5  // 区间值为 1 2 3 4 
1... // 1 到 ∞
// if 语句 
if(true){
  
}else if(true){
  
}else{
  
}
// 小括号可以不写 
if true {
  
}else if true {
  
}else {
  
}

// switch case  不写break 也不会穿透 想要穿透效果使用多值匹配
var a = 10
switch (a){
  case 1 : 
  			break
  case 2:
  			break
  default:
  			break
}
// 匹配多个值
switch(a){
  case 1,2,3,4:
  		 break
  case 5,6,7,8:
  		break
  default:
  		break
}

 // for  in 循环
for index in 1...5 { // 步长 1
    print(index) // 1,2,3,4,5
}
for (int a = 1; a<= 5 ;a++ ){
    System.out.println(a) 
}

// for in 步长不为1 从0开始到10结束 包含10 步长为2
for index in stride(from: 0, through: 10, by: 2) {
    print(index)
}
for (int a = 0; a<= 10 ;a+=2 ){
			System.out.println(a);
}

// for in 步长不为1  从0开始到10结束 不包含10 步长2
for index in stride(from: 0, to: 10, by: 2) {
    print(index) // 0 2 4 6 8 10
}
for (int a = 0; a< 10 ;a+=2 ){
			System.out.println(a);
}
// for in 反向
for index in stride(from: 0, to: 10, by: 2).reversed() {
    print(index) // 8 6 4 2 0 
}
// 跳出 
continue // 跳出本次进入下次
break // 跳出本层所有

// while 
while(true){
  
}

// repeat while == do{ }while()
repeat{
  
}while()



// String 基本操作
var str = "ABCD"
print(str.count) // 长度

// 获取子字符
// String.Index 内部类 用于字符串索引下标 不是Int类型
var i:String.Index = str.startIndex // 字符串的第一个索引
var j:String.Index = str.endIndex // 字符串的最后一个索引 + 1
print(str[i]) // A 获取 i索引的字符
print(str[str.index(after: i)]) // B 获取 i 索引的 after(后偏移1位) 的索引位置字符
print(str[str.index(before: j)]) // F 获取 j 索引 before(前偏移1位) 的索引位置字符
print(str[str.index(i, offsetBy: 2)]) // C 获取 i索引 往后偏移 2 位 的索引位置的字符
var lastIndex = str.index(before: j) // 字符串最后一个字符的索引
print(str[i...lastIndex]) //取区间 ABCD 从 i 索引位置 一直到包含    lastIndex 索引位置
print(str[i.. = [1,2,3,4]
// 添加
a.append(1) // 尾部追加
a += [5] 
// 数组合并 
var a = [12,11]
var b = [14,44]
var c = a + b  // c = [12,11,14,44]

// set 集合 无序不重复 
var a:Set = [1,2,3]
var a:Set = ["1","2"]
var a:Set = []

// Dictionary 字典集合 Map
var a = ["A":"a","V":"v"]
var a:Dictionary = ["A":"a","V":"v"]
var a = [String:String]()
var b:Dictionary? = nil
// 遍历
var  a = ["1":"1","2":"2"]
for (key,value) in a {
    print(key,value)
}
// 函数 
// 函数关键字 函数名 (参数名:参数类型) -> 返回值类型
// 形参列表 都是只读的 let 不可更改
func test( a:Int,b:Int) ->Int
{
    var i = a;
    i *= 2
    return i
}
// 传引用 inout 
var i = 2
func test( a:inout Int)
{
    a *= 2
}
test(a: &i)
print(i) // 4
// arg0 与 arg1 为 外部可见参数名
// a b 内部使用参数名
func test(arg0 a:Int,agr1 b:Int) ->Int
{
    var i = a;
    i *= 2
    return i
}
// 形参 可变参数  类型...
func test( a:Int,b:Int...) -> Int
{
    var i = a;
    i *= 2
    return i
}
print(test(a: 2, b: 1,2,3,4))

//函数的返回值还是函数 以及指向函数的指针
var func1: (Int,Int)->Int // 定义变量 func1 类型是 两个Int参数 返回值也是Int的函数 类型

func sum(a:Int,b:Int)->Int{ // 求和
    return a + b
}

func test() -> (Int,Int)->Int // 两个Int参数 返回值也是Int的函数 作为返回值
{

    return sum(a:b:) // sum 函数符合需求
}

func1 = test() // 变量接收test()的返回值  fucn1 == sum

print(func1(10,20)) // 调用func1 就是调用 sum 

// 函数指针 匿名函数
var a:(Int,Int)->Int = {(a:Int,b:Int)->Int in
    return a + b
}
print(a(10,20)) // 30

// 函数作为参数传递给另一个函数
var func1: (Int,Int)->Int
func sum(a:Int,b:Int)->Int{
    return a + b
}
func test(func1:(Int,Int)->Int) -> Int{   
    return func1(10,20)
}
print(test(func1: sum))  // 30

// 函数嵌套 
func sum() -> Int {
    func sum2()->Int{
        return 10 + 10
    }
    return sum2()
}
print(sum()) // 20

// guard 拦截语句
func test(arg1 a:Int,arg2 b:Int)->Int{
    
    guard a<10 && b<10 else { // 如果 a < 10 && b < 10 走 a * b
        return a + b					// 否则 走 a + b
    }
   return a * b
}
print(test(arg1: 10, arg2: 10)) // 20

// 闭包  就是匿名函数
{
  (a:Int , b:Int ) -> void in
  
}

// 枚举
enum  TestEnum : Int{
    case ONE = 1
    case TWO = 2
}
print(TestEnum.ONE) // ONE
print(TestEnum.ONE.rawValue) // 1

// 结构体 适合用来传递数据 只会传值不会传引用 深拷贝
struct Test{
    var name:String
    var age:Int
}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/773341.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号