05 Swift break-continue\Switch\函数

Snip20160301_5.png

]

for num in arr{

if num == 5
{
    print("找到幸运数字")
    
    break
    
    
}else{

    print("没有找到幸运数字")

    }
}

var arr1:Array<Int> = [1, 3, 5, 3, 7, 8, 4]

var count:Int = 0

for num in arr1{
    if num % 2 != 0
    {
        print("不能被2整除")
        continue
    }else{
        print("能被2整除")
        count++
    }
}

print("count = \(count)")

**输出结果: **

Snip20160301_1.png
  • break: 跳出循环, 无论循环保持条件是否还为真, 都不会继续执行循环
  • continue: 跳出本次循环, 如果循环保持条件还为真, 那么还会继续执行循环

2. Switch

var rank = "A"

switch rank{

    case "A":
        print("优")
    case "B":
        print("良好")
    case "C":
        print("良")
    default:
    print("没有评级")
}

 // 因为Swift不能穿透,所以不能这么写,故:以下写法是错误的

//switch rank{                                 
//    
//case "A":
//case "B":
//    print("良好")
//case "C":
//    print("良")
//default:
//    print("没有评级")
//}


switch rank{

case "A","B":      //这个在我们OC中是不能够这样写的
    print("优")
case "C":
    print("良")
default:
    print("没有评级")
}

 // Swift 中的switch不能不写default的、而且他的位置只能是在最后面

 // 在OC中,都知道,一旦case后面的语句多于一行的时    候,就必须加上大括号,但是在Swift是可以不用加的

var rank1 = "A"

switch rank1{

    case "A":
        var count = 0
        print("优")

    case "B":
        print("良好")
    case "C":
        print("良")
    default:
        print("没有评级")

}

 // 区间与元组匹配

var num = 10

switch num{

    case 1...9:
        print("个位数")
    case 10...99:
        print("两位数")
    default:
        print("其他数字")
}

var point = (10, 15)

switch point{

case (0, 0):
    print("坐标在原点")
case (1...10,10...20):
    print("你猜坐标在哪???")
case (_,0):
    print("坐标在x轴上")
default:
    print("Other")
}

 // 值绑定

var point1 = (1, 10)

switch point1{

    case (var x, 10): // 会将point中的x赋值给x
        print("x = \(x)")
    case (var x, var y): // 会将point中的x,y赋值给x,y
        print("x= \(x),y = \(y)")
    case var (x, y):
        print("x = \(x), y = \(y)")
    default:
        print("Other")
}

 // 根据条件绑定值

var point2 = (100, 10)

switch point2{

case var (x, y) where x > y:
    print("x = \(x), y = \(y)")
default:
    print("Other")
}

**输出结果: **

Snip20160301_2.png

3. 函数

3.1 函数定义:

func say() -> Void
{
    print("高俊是帅哥")

}

func say1()
{
    print("高俊是很屌的哟")

}

 // 有参数,无返回值
func sayWithName(name:String)
{
    print("hello-> \(name)")

}

sayWithName("gaojun")

 // 带有多个参数的函数

func sayWithName2(name:String, age:Int)
{
    print("my name is \(name),I'm \(age) years old")

}

sayWithName2("高俊", age: 19)


 // 无参,有返回值

func info() -> String
{
    return "my name is gaojun I'm nineteen years old"

}

print(info())

 // 有参,有返回值

func infoWithName(name:String, age:Int) -> String
{
    return "name is \(name), age is \(age)"
}

print(infoWithName("gaojun", age: 19))


 // 嵌套函数

var arr:Array<String> = ["gaojun", "jack", "mark"]

func showArry(array:[String])
{
    for number in array
    {
        print("\(number), ") 
    }
}

showArry(arr)



//2、
func bubbleSort (inout array:[Int])
{
    func swap(inout a:Int, inout b : Int)
    {
        let temp = a  
        a = b     
        b = temp
    }

    let count = array.count

    for var i = 1 ; i < count ; i++
    {
        for var j = 0 ; j < (count - i) ; j++
        {
            if array[j] > array[j + 1]
            {
                swap(&array[j], b: &array[j + 1])
            }
        }
    }
}

var arr1:Array<Int> = [50, 20, 30, 80]

bubbleSort(&arr1)

print(arr1)

**输出结果: **

Snip20160301_3.png

函数: 完成某个特定任务代码块, 给代码起一个合适的名称称之为函数名称
以后需要执行代码块只需要利用函数名称调用即可
好比每一个人都有一个名字, 说出名字就可以找到对应的人

3.2 Swift内部函数, 外部函数

内部函数:默认情况下的参数都是内部参数
外部函数:如果有多个参数的情况,调用者并不知道每一个参数的含义,
只能通过查看头文件的形式理解,参数的含义
那么能不能和OC不一样让调用者直观的知道参数的含义呢?使用外部参数
外部参数只能外部用,函数内部不能使用,函数内部只能使用内部参数

func divisionOpertion1(a: Double, b: Double) ->     Double{

    return a / b
}

print(divisionOpertion1(10.2, b: 3.1))

** 默认参数:**
可以在定义函数的时候给某个参数赋值,当外部调用没 有传递该参数时会自动使用默认值

func joinString(s1:String, toString s2: String, joiner     s3: String) ->String
{
    return s1 + s2 + s3

}

func joinString2(s1: String, toString
    s2: String , joiner
    s3: String = "❤️") ->String
{
    return s1 + s3 + s2

}

print(joinString2("gaojun", toString: "beauty"))

如果指定了默认参数,但是确没有声明外部参数时
系统会自动把内部参数名称即当做内部参数名称、又当做外部参数名称
并且在调用的时,如果需要修改默认参数的值,必须写上外部参数名称

func joinString3(s1:String, toString s2: String, joiner:     String = "🐶") ->String
{
    return s1 + joiner + s2;

}

print(joinString2("gaojun", toString: "beauty"))

func joinString4(s1:String, joiner: String = "❤️", toString s2: String) ->String
{
    return s1 + joiner + s2;

}

print(joinString4("高俊", joiner: "🐶", toString: "beauty"))

常数参数和遍历参数:

默认情况下,swift中所有函数参数都是常量参数,如果想砸u中修改参数,就必须在参数前加上var

func swap(var a: Int, var b: Int)
{
    print("交换前 a = \(a) b = \(b)")

    let temp = a

    a = b

    b = temp

    print("交换后 a = \(a) b = \(b)")

}

swap(10, b: 20)

**inout参数: **

如果想在函数中修改外界传入的参数,
可以将参数的var换成inout ,这回会传递参数本身而不是参数的值

func swap2(inout a: Int, inout b: Int)
{
    let temp = a

    a = b

    b = temp

}

var x1 = 10

var y1 = 20

print("交换前 a = \(x1) b = \(y1)")

swap2(&x1, b: &y1)

print("交换后 a = \(x1) b = \(y1)")

**变参函数: **

如果没有变参函数,并且函数参数个数又不确定,

那么只能写多个放啊发或者用将函数参数改为集合变参只能放到参数列表的最后一位,变参必须指定数据类型,变参只能是同类型的数据

func add(num1:Int, num2: Int, num3: Int) ->Int
{
    let sum = num1 + num2 + num3

    return sum
}

print(add(1, num2: 2, num3: 3))

func add1(nums: [Int]) ->Int
{
    var sum = 0

    for num in nums
    {
        sum += num
    }

    return sum

}

print(add1([1, 2, 3, 4]))

func add2(nums:Int...) ->Int
{
    var sum = 0

    for num in nums
    {
        sum += num
    }

    return sum
}


print(add2(1, 2, 3, 4, 5))


func add3(other: Int, nums: Int...) ->Int
{
    var sum = 0

    for num in nums
    {
        sum += num
    }

    return sum
}
print(add3(99, nums: 1, 2))

3.3 函数类型

函数类型:

类似于C语言的指向函数的指针
类似于OC中的block
函数类型是由函数的参数类型和返回值类型组成的


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

func sub(a: Int, b: Int) ->Int
{
    return a - b
}

 // 可以利用函数类型定义函数变量和常量

var funcP: (Int, Int) ->Int = sum

funcP = sub

print(funcP(10,20))


 // 函数类型可以作为函数的参数
func calFunc(a: Int, b: Int, OPtion:(Int, Int) -> Int) ->Int
{
    return OPtion(a, b)

}

print(calFunc(10, b: 20, OPtion: sum))

print(calFunc(10, b: 20, OPtion: sub))


 // 函数类型可以作为函数返回值
func max(a: Int, b: Int) ->Int
{
    return a > b ? a : b
}

func min(a: Int, b: Int) ->Int
{
    return a < b ? a : b
}

func chooseFunc(getMax:Bool) -> (Int , Int) -> Int
{
    return getMax ? max : min
}

var funcP2:(Int, Int) -> Int = chooseFunc(false)

print(funcP2(10, 20))

作者说: 本次的更新比较简单, 主要是以代码为主, 当然相当一部的笔记也都在代码里面. 所以各位看的时候, 一定要注意代码里面的笔记哟!!!

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

推荐阅读更多精彩内容

  • 本章将会介绍 控制流For-In 循环While 循环If 条件语句Switch 语句控制转移语句 continu...
    寒桥阅读 711评论 0 0
  • Hello Word 在屏幕上打印“Hello, world”,可以用一行代码实现: 你不需要为了输入输出或者字符...
    restkuan阅读 3,147评论 0 5
  • 86.复合 Cases 共享相同代码块的多个switch 分支 分支可以合并, 写在分支后用逗号分开。如果任何模式...
    无沣阅读 1,340评论 1 5
  • 轻轻的 淡淡的 一切 如朱唇轻启 不道破 那美丽绚烂 慢慢地 悠悠地 如指间流沙 握不住 那剔透晶莹 所以 还是远...
    乌鸦一只阅读 103评论 0 2
  • 曾相依于青草之席 执手赏风吹星云 共许美好 十月如字的长短 瞬息而过,空留叹息 忽有言语 不知所言,不明所云 言罢...
    说一声感谢阅读 400评论 0 3