关闭

Swift 基础补充(1)

127人阅读 评论(0) 收藏 举报
分类:
1.Swift 是一种新的编程语言,用于编写 iOS,OS X 和 watchOS应用程序。Swift 结合了 C 和 Objective-C 的优点并且不受 C 兼容性的限制,Swift 是基于成熟而且倍受喜爱的 Cocoa 和 Cocoa Touch 框架

2.
  • 简单值(Simple Values)
  • 控制流(Control Flow)
  • 函数和闭包(Functions and Closures)
  • 对象和类(Objects and Classes)
  • 枚举和结构体(Enumerations and Structures)
  • 协议和扩展(Protocols and Extensions)
  • 泛型(Generics)

3.print("Hello, world!")

4.

简单值:使用let来声明常量,使用var来声明变量。let声明的常量只能赋值一侧 而var可以多出赋值

例如:
var myVariable =42 myVariable =50let myConstant =42
常量或变量的类型必须和所赋值的类型一样,可以不用明确的声明类型,因为赋值时编译器会自动推断类型,在上面的例子中,编译器推断出myVariable是一个整数(integer)因为它的初始值是整数。

如果没有初始值或没有足够的信息定义它的类型,那么可以再变量后面声明类型用冒号分开。
例:
let implicitInteger =70let implicitDouble = 70.0 let explicitDouble: Double =70
显示转化和隐式转化: 系统可以自己识别转换的类型为隐式转化,而需要认为的指定类型转换的为显示转化,否则系统自身无法处理类型转换。

把常量或变量转转换为字符串,再常量前加一个反斜杠
let apples =3let oranges =5let appleSummary ="I have\(apples) apples."let fruitSummary ="I have\(apples + oranges) pieces of fruit."

使用方括号[]来创建数组和字典,并使用下标或者键(key)来访问元素。最后一个元素后面允许有个逗号。

 varshoppingList = ["test1","test2","test3","test4 "]
        shoppingList[1] ="test5"
        print(shoppingList)
       
        var occupations = [
            "OM1" : "OM1",
            "OM0" : "OM1"
        ]
        occupations["OM2"] ="test3"
       print(occupations)

输出["test1", "test5", "test3", "test4 "]
["OM1": "OM1", "OM0": "OM1", "OM2": "test3"]
当key存在时直接替换掉key对应的值,若key不存在则添加一直新的key值

创建空数组字典
letemptyArray = [String]()
letemptyDic = [String:Float]()
print(emptyArray)
print(emptyDic)

如果类型已确定 :可直接这样声明
shoppingList = [] occupations = [:]

控制流
使用ifswitch来进行条件操作,使用for-inforwhilerepeat-while来进行循环。包裹条件和循环变量括号可以省略,但是语句体的大括号是必须的。

letsoureArray = ["OM1","OM2","OM3","OM4","OM5"]
        for soure in soureArray {
            if soure == "OM2" {
               print(soure)
            }
        }
       
        let soureArray2 = [10,11,12,13,14,15]
        var jiSuan = 0
        for value in soureArray2 {
            if value > 12 {
                jiSuan += value
                print(jiSuan)
            }
        }

if语句中,条件必须是一个布尔表达式——这意味着像if score { ... }这样的代码将报错,而不会隐形地与 0 做对比。 例如 ifvalue >12, 处理数值缺失使用iflet 。在类型后面加一个问号来标记这个变量的值是可选的 ,此时值可以为NIL
letoptainString:String? ="Hello"
        print(optainString ==nil)
       
        let optainName :String? ="John"
        var getting = "Hello!"
        if let name = optainName {
            getting = "Hello \(name)"
            print(getting)
        }

如果变量的可选值是nil,条件会判断为false,大括号中的代码会被跳过。如果不是nil,会将值赋给let后面的常量,这样代码块中就可以使用这个值了。

switch支持任意类型的数据以及各种比较操作——不仅仅是整数以及测试相等。

例 
letvegetable ="perper.OM2"
        switch vegetable {
        case "celery":
            print("Add some raisins and make ants on a log.")
        case "OM1", "OM2":
            print("That would make a good tea sandwich.")
        case let x where x.hasPrefix("perper"):
            print("Is it a spicy\(x)")
        default:
            print("Everything tastes good in soup.")
        }

switch 可以是if判断 可以加 或(多个值)

遍历字典可以使用for in  
 letnumbers = [
            "OM1":[2,3,4, 5, 6],
            "OM2":[7,8,9],
            "OM3":[10,11,12,13],
        ]
       
        var largest = 0
        for (kind, number) in numbers {
            for soures in number {
                if soures > largest {
                    largest = soures;
                    print(kind)
                    print(largest)
                }
            }
        }
kind 为遍历的key值 number 为value 集

使用ifswitch来进行条件操作,使用for-inforwhilerepeat-while来进行循环
 varn =2
       
while n < 100 {
            n = n *
2
        }
       
print(n)
       
       
var m = 2
       
repeat {
           m = m *
2
        }
while m < 100
       print(m)
 for 循环有两种方式 

 varfirstForLoop =0
        for i in 0..<4{
           firstForLoop += i
        }
        print(firstForLoop)
       
       
        var secondForLoop = 0
        for var i = 0; i < 4; ++i {
            secondForLoop += i
        }
       print(secondForLoop)

0..<4 i<4 效果一致 使用..<创建的范围不包含上界,如果想包含的话需要使用...

// 闭包 函数

使用func来声明一个函数,使用名字和参数来调用函数。使用->来指定函数返回值的类型。


func greet(name: String, foot:String) ->String{
            return "hello \(name), today eat\(foot)."
        }
        greet("xiaoMing", foot:"salad")
       print(greet("xiaoMing", foot:"salad"))

1. 使用元组来让一个函数返回多个值。该元组的元素可以用名称或数字来表示
funccalculates(scores: [Int]) -> (min:Int, max:Int, sum:Int) {
            var min = scores[0]
            var max = scores[0]
            var sum = 0
           
            for score in scores {
                if score > max {
                    max = score
                } else if score < min {
                    min = score
                }
                sum += score
            }
            return (min, max, sum)
        }
       
        let statistics = calculates([5,3,100,3 ,9])
        print(statistics.sum)
       print(statistics.1)

2.函数可以带有可变个数的参数,这些参数在函数内表现为数组的形式

 funcsumOf(numbers:Int...) ->Int {
           varsum =0
            for number in numbers {
                sum += number
            }
            return sum
        }
        sumOf()
        sumOf(42,579,12)
        print(sumOf(42,579,12))



使用元组来让一个函数返回多个值。该元组的元素可以用名称或数字来表示。

 
        func calculates(scores: [Int]) -> (min:Int, max:Int, sum:Int) {
            var min = scores[0]
            var max = scores[0]
            var sum = 0
           
            for score in scores {
                if score > max {
                    max = score
                } else if score < min {
                    min = score
                }
                sum += score
            }
            return (min, max, sum)
        }
       
        let statistics = calculates([5,3,100,3 ,9])
        print(statistics.sum)
       print(statistics.1)
函数可以带有可变个数的参数,这些参数在函数内表现为数组的形式:
func sumOf(numbers: Int...) -> Int {
    var sum = 0
    for number in numbers {
        sum += number
    }
    return sum
}
sumOf()
sumOf(42, 597, 12)
函数可以嵌套。被嵌套的函数可以访问外侧函数的变量,你可以使用嵌套函数来重构一个太长或者太复杂的函数。
func returnFifteen() -> Int {
    var y = 10
    func add() {
        y += 5
    }
    add()
    return y
}
returnFifteen()


函数是第一等类型,这意味着函数可以作为另一个函数的返回值
func makeIncrementer() -> (Int -> Int) {
    func addOne(number: Int) -> Int {
        return 1 + number
    }
    return addOne
}
var increment = makeIncrementer()
increment(7)
函数也可以当做参数传入另一个函数。
func hasAnyMatches(list: [Int], condition: Int -> Bool) -> Bool {
    for item in list {
        if condition(item) {
            return true
        }
    }
    return false
}
func lessThanTen(number: Int) -> Bool {
    return number < 10
}
var numbers = [20, 19, 7, 12]
hasAnyMatches(numbers, condition: lessThanTen)

var arr = [1,2,3,4,5]
        func famp(a : Int) ->Int{
            return a + 10
        }
       
        var arr2 = arr.map(famp)
        print(arr2)
       print(arr2 = (arr2))


 letmappedNumbers = numberss.map({numberssin3* numberss})
       print(mappedNumbers)
map为遍历使用 sort 为排序使用numbers为数组类型

let sortedNumbers = numberss.sort{$0 > $1}
print(sortedNumbers)


0
0
查看评论

零基础从头学习Swift(一):Swift环境搭建

通过博客的方式来记录自己的学习Swift过程,同时把学习的内容分享给大家,希望能为你提供一点帮助
  • xiaojimanman
  • xiaojimanman
  • 2016-11-29 17:53
  • 1061

数论基础的补充讲解

数论基础的补充讲解 整除的一些性质: (1)能被2整除的数,个位上的数都能被2整除 (2*)能被4整除的数,个位和十位所组成的两位数能被4整除 (3*)能被8整除的数,百位、十位和个位所组成的三位数能被8整除 (4)能被5整除的数,末尾是0或5 (5*)能被25整除的数,十位和个位所组成的两位数能被...
  • ACMore_Xiong
  • ACMore_Xiong
  • 2015-08-19 00:45
  • 2202

Java基础知识总结-补充

出自:http://blog.csdn.net/huxiaoyonglan1/article/details/50242113 Java基础知识总结-补充 写代码: 1,明确需求。我要做什么? 2,分析思路。我要怎么做?1,2,3。 3,确定步骤。每...
  • lzhat
  • lzhat
  • 2017-02-11 16:09
  • 664

Swift专栏:Swift基础入门(一)

Swift 介绍 简介 Swift 语言由苹果公司在 2014 年推出,用来撰写 OS X 和 iOS 应用程序2014 年,在 Apple WWDC 发布 几家欢喜,几家愁愁者:只学Object-C的人欢喜者:之前做过java/python/js语言的人 特点 特点 从它的语法中能看到...
  • wzc10101415
  • wzc10101415
  • 2017-03-26 20:45
  • 388

JAVA语言程序设计(基础篇)第十版

Queue类 import java.util.Arrays; public class Queue { private int[] element; private int size=8; Queue(){ element=new int[size]; } public void enQueue(...
  • summerdream_
  • summerdream_
  • 2017-07-04 09:06
  • 707

关于“幽灵架构”的补充说明2:Struct以及Copy - on -Write

在“幽灵架构”Demo中我把两个数据模型声明成了Struct,苹果WWDC2015的414号视频讲解了非常多关于Struct的优势,其实也是所有值类型的优势。首先Swift标准库中绝大部分是值类型的,值类型的值传递是通过copy的,而作为一门静态语言,Swift要求所有的对象都有明确的类型,明确的类...
  • cg1991130
  • cg1991130
  • 2016-05-11 14:38
  • 1850

Swift基础框架的封装

最近闲来无事,就自学了swift编程语言,并且根据之前OC的经验,封装了Swift版本的基础框架,一些常用的的方法,常用的类库和第三方,都封装到了一起,方便以后新项目的使用,在这里,分享给大家,欢迎大家下载使用,丰富功能:https://github.com/CherishSmile/ZYBase
  • z1332291552
  • z1332291552
  • 2017-04-28 11:06
  • 441

Swift语言基础小习题(包含答案)-只适合菜鸟.

本文章,只适合初级菜鸟,有兴趣的可以进来做做,欢迎交流
  • qq_39802178
  • qq_39802178
  • 2017-10-19 15:58
  • 238

补充C#基础1

《c#与.net3.0高级程序设计》3.5设置成员的可见性public:private:protected:不能从对象访问,可以从定义它的类中或者是这个类的派生类中访问。internal:同一个程序集的任意类型都是可以访问,但不能被程序集以外的类型访问。protected internal:6∩7设...
  • shewolfbfh
  • shewolfbfh
  • 2009-06-28 15:35
  • 228

iOS中 Swift初级入门学习(一)

Swift,苹果于2014年WWDC(苹果开发者大会)发布的新开发语言,可与Objective-C*共同运行于Mac OS和iOS平台,用于搭建基于苹果平台的应用程序。
  • qq_31810357
  • qq_31810357
  • 2015-11-25 08:32
  • 1583
    个人资料
    • 访问:47789次
    • 积分:1387
    • 等级:
    • 排名:千里之外
    • 原创:90篇
    • 转载:14篇
    • 译文:1篇
    • 评论:0条
    博客专栏
    文章分类