Swift 初探

另附上.playground文件,可使用最新xcode打开运行
https://github.com/BlueStormLSS/swift

import UIKit

//基于swift5
//var可变 let不可变 ////?表示可能存在也可能不存在  !表示一定存在
//:后可不跟类型,会根据赋值自动给与类型
var varInt = 40
var varIntNil : Int
var varIntClass : Int = 40

let letInt = 30.0
let letIntClass : Double = 30.0

let letString : String? = nil
let letStrings : String! = nil


///字符串
let letString1 = "Hello"
let letString2 : String = " "
var varString1 = "World"
let letString3 = "\(letString1+letString2)world"

print(letString1+letString2+varString1)
print(letString3)

//遍历字符串
for c in letString1 {
    print(c)
}

///数组

let letArray1 = [String]()//创建一个内容类型为String的空数组
let letArray2 : [Int] = [1,2,3]//创建一个内容类型为Int的数组
let letArray3 = [Int](repeating: 4, count: 6)//创建一个6个元素,并且都为Int类型,元素为4的数组
let letArray4 = ["one","two","three"]
var varArray1 = letArray4
//添加元素
varArray1.append("four")

print("letArray1 = \(letArray1)")
print("letArray2 = \(letArray2)")
print("letArray3 = \(letArray3)")
print("letArray4 = \(letArray4)")
print("varArray1 = \(varArray1)")

//合并数组
let letArray5 = letArray2+letArray3
print("letArray5 = \(letArray5)")


//添加元素
varArray1 += ["five"]
print("varArray1 = \(varArray1)")

//更改元素
varArray1[2] = "3"
print("varArray1 = \(varArray1)")

//计算个数
print("letArray5的元素个数为:\(letArray5.count)")
//判空
print("letArray5 是否为空:\(letArray5.isEmpty)  letArray1 是否为空:\(letArray1.isEmpty)")

///遍历数组
for item in varArray1 {
    print(item)
}

for (idx,item) in varArray1.enumerated() {
    print("在idx = \(idx)位置上的元素为\(item)")
}

///字典

//以下内容不再用print打印,右侧可直接观察

var dictionary1 = [String:Int]()//创建key为String类型,value为Int类型的空字典
//如果有就修改,没有就添加
dictionary1.updateValue(1, forKey: "one")///此方法会返回旧的值
dictionary1.updateValue(2, forKey: "two")///此方法会返回旧的值
dictionary1.updateValue(3, forKey: "three")///此方法会返回旧的值

print(dictionary1)
//指定key修改
dictionary1["one"] = 11

//移除key-value
dictionary1.removeValue(forKey: "one")

//dictionary1.removeAll()

//获取所有key
print("\(dictionary1.keys)")
//获取所有value
print("\(dictionary1.values)")
//个数
print("键值对个数:\(dictionary1.count)")
//是否为空
print("是否为空:\(dictionary1.isEmpty)")
//遍历字典
for (key,value) in dictionary1 {
    print("第一种遍历:key = \(key),value = \(value)")
}

for (key,value) in dictionary1.enumerated() {
    print("第二种遍历:key = \(key),value = \(value)")
}


///函数和各种循环,条件语句

//函数下面有如何使用
//传入一个String,返回一个Int
func funcOne(str : String) -> (Int){
    print(str)
    return 5
}
//和funcOne啥区别呢 嘿嘿
func funcOnePlus(_ str : String) -> (Int){
    return 4
}
//加法
func funcAdd(one : Int, two : Int) -> (Int){
    return one+two
}

//返回一个元组  (后面是不对的)(元组 暂时理解为特殊的数组,数组是有序的,并且类型相同)
func funcParameter() -> (one : Int , two : String){
    return (4,"string")
}
//无参无返回值
func funcNono() -> (){
    print(funcParameter())
}


//进阶 函数套函数
func funcAddOne() -> Int{
    var y = 10
    //返回值为空时,返回值 ->() 可省略
    func add(){
        y += 5
    }
    add()
    return y
}

//返回值为一个函数
func funcMake() -> ((Int) -> Int) {
    
    //addOne的参数为 Int ,返回值是 Int,也就是 (Int) -> Int 结构
    //funcMake 返回值是(Int) -> Int ,所以可以返回addOne 函数本身
    func addOne(number : Int) -> Int {
        return 1+number;
    }
    return addOne
}

//传参是一个函数
func funcParter(list:[Int] ,condition: (Int) -> Bool) -> Bool {
    for item in list {
        if condition(item) {
            return true
        }
    }
    return false
}
//传参的函数
func lessThan(number : Int) -> Bool {
    return number < 13
}

let arrays = [4,6,8,10,1,3,7]

for (idx,item) in arrays.enumerated() {
    if item == 4 {
        let result1 = funcOne(str: "string")
        let result2 = funcOnePlus("string")
        print(funcAdd(one: result1, two: result2))
    }else if item == 6{
        funcNono()
    }else if item == 8{
        print(funcAddOne())
        
        //funcMake 返回值为一个函数
        let makeFunc = funcMake()
        print(makeFunc(4))
        
        //传参是一个函数
        let numbers = [20,13,7,1]
        
        let trueOrFalse = funcParter(list: numbers,condition: lessThan)
        print(trueOrFalse)
    }else{
        switch item {
        case 10:
            print("当前循环次数:\(idx) 值为10")
        case 1:
            print("当前循环次数:\(idx) 值为11")
            continue///swift swith不需要break,所以,如果想继续执行,需要加continue,另外
        case 3:
            print("当前循环次数:\(idx) 值为10")
        default:
            print("当前循环次数:\(idx) 就剩最后一个小7了")
        }
        
        
    }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,487评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,621评论 2 374
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,611评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,659评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,509评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,380评论 1 274
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,799评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,443评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,739评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,781评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,554评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,400评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,811评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,043评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,330评论 1 253
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,775评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,978评论 2 337

推荐阅读更多精彩内容