Swift基础内容

一、基础语法

// 输出语句
print("Hello, Swift")
// 在Swift2.0之前print和println, 2.0之后合并为一个函数print("输出内容")

// 语法部分
/**
 * 1. 不用再写';'
 * 2: 注释方式: 1. 单行注释'//'
               2. 多行注释'/* */'
               3. 注意: 多行注释可以嵌套'/* /* */ */'
*/

// 常量/变量
// 1. 常量: 程序运行期间不可改变的量 修饰符'let'
let number = 10
// 2. 变量: 程序运行期间可以改变的量 修饰符'var'
var time = 30
// 注意: 常量不能修改 如:number = 20 (X)

// 标识符
/**
 * 1. 有数字、字母、下划线组成
 * 2. 不能以数字开头
 * 3. 不能与系统关键字重复命名, 如要命名加`系统关键字`
 * 4. 全面支持Unicode编码(调用emoj(表情)control + command + 空格)
*/

let `let` = 100
let 张三 = 18
var �� = 40 
张三 + ��
`let`

// 一、数据类型
// 1. 整型 OC NSInteger; Swift Int Int8 Int16 Int32 Int64
Int.max
Int.min

Int64.max
Int64.min

Int8.max
Int8.min

// 无符号整型 OC NSUInteger; Swift UInt
UInt.max
UInt.min

// 声明常量或变量的类型
// 修饰符 标识符 : 类型 = 初值
let num : Int = 20
// 注意: 如果没有类型修饰符 默认为Int

// 2. 浮点型
// 精确度 Float 精确度 低于6位
// 双精度 Double 精确度 15位
// 注意: 如果没有类型修饰符 默认为Double
let float : Float = 3.145432145
var double : Double = 3.12345789032567892765423

let timer = 3.123456789

// Swift中有严格的类型审核
// 必须保证类型匹配, 才可以作运算
double + Double(float)


// 3. 字符和字符串
// 字符
// OC char
// Swift Character
// 字符串
// OC NSString
// Swift String

let char : Character = "a"
// Swift中的字符串
var 刘 : String = "六"
var 六六 : NSString = "六六"

// 字符串拼接
刘 + "1111"
刘
刘 += "123"// 不同类型的字符串拼接, 需要强转
// as 强转修饰符
刘 + (六六 as String)

var 骚栋 = "asdf"
// 字符串调用方法用.去调用
// Swift中没有[]
骚栋.uppercaseString
骚栋.lowercaseString

// 求字符串长度
骚栋.characters.count

// 其他类型转字符串
// 1.插入语法
"\(num)"
// 2.String()
String(num)

骚栋 == 六六

// 4. Bool类型
// Swift中的布尔类型
// true 和 false
var ��栋 : Bool = true


// 5. 可选类型 ? 
var saoDer : String? = "11"
print(saoDer)
saoDer! + "aa"
// !强制解析, 把不一定的值肯定

// 6. 元组类型
// 1> 元组有多个参数
var 赵 = ("找的与", 100, "性别不详")
赵.0.1.2

var 小赵 = (name : "找的与", age : 100, sex : "女")
小赵.name
小赵.0
小赵.age


let (name, age, sex) = 小赵
name
age
sex



// 7. 数组类型
// 数组初始化
// Array<SomeType> 或者[SomeType]
// 1> 空数组的初始化
// 直接赋空值
var array : [Int] = []
// 使用初始化
let arr = [Int]()
// 使用初始化
let ar = Array<Int>()

// 2> 非空数组初始化
// 直接使用非空的数组
let 数组 : [Int] = [1, 2, 3, 4]
// 数组初始化方法初始化
var myArr = [Int](count: 5, repeatedValue: 1)
// 使用初始化方式
let myArray = Array(arrayLiteral: 1, 2, 3, 4, 5)

// 判断是否为空
myArr.isEmpty
arr.isEmpty

// 数组中添加元素
myArr.append(11)
myArr += [22]

// 插入元素
myArr.insert(99, atIndex: 1)

// 取值
myArr[1]

// 修改
myArr[0] = 30
myArr
// [0, 3] 0 ~ 3
myArr[0...3] = [1, 2, 3, 4]
myArr

// 删除
//myArr.removeFirst()
//myArr
//myArr.removeLast()
//myArr
//myArr.count

var �� = ["��", "��", "��", "��", "��", "��", "��", "��", "��", "����", "��", "��"]


// 8> 字典(无序)
// 在Swift中要求字典中的key必须是统一类型
// 字典初始化
let dic = Dictionary<String, AnyObject>()
// 赋初值
var dictionary = ["name" : "修睿"]
// 字面量, 判断key值是否存在
// 如果存在, 修改对应key的Value
// 如果不存在, 添加Key-Value
dictionary["sex"] = "女"
dictionary


// 更新(Value)键值
dictionary.updateValue("男", forKey: "sex")
dictionary

// 根据key值删除
dictionary.removeValueForKey("name")
dictionary

// 字典通过键值下标移除Key-Value
let index = dictionary.indexForKey("sex")
dictionary.removeAtIndex(index!)
dictionary


// 二. 逻辑判断
// 1. if...else
if 1 > 3 {

} else {

}

// switch...case
// 不同点:
// 1. 不用写break, 对应有一个fallthrough
// 2. 填入的开关, 不再只是整型表达式, 可以是字符串
// 3. case的条件可以不是固定值, 是个区间
let abc = 30
switch abc {
   case 10:
      print("我是10")
   case 20:
      print("我是20")
   case 30:
      print("我是30")
      // 穿过
      fallthrough
   case 40:
      print("我是40")
   default:
      print("111")
}


var nameArr = ["张三", "李四"]
switch nameArr[0] {
    case "张三":
       print("我是张三")
    case "李四":
       print("我是李四")
    default:
       print("111")

}

// [0, 3] 0 <= x <= 3
// [0, 4) 0 <= x < 4

let score = 90
switch score {
    case 0..<60:
        print("不及格")
    // 两个同时满足
    case 60..<80 where true:
        print("良好")
    case 80..<100:
        print("优秀")
    default:
        print("补考")

}

// case的条件还可以为一个元组
var point = (12, 34)
switch point {

case (0, 0):
    print("在原点")
case (_, 0):
    print("在x轴上")
case (0, _):
    print("在y轴上")
default:
    print("不在坐标轴上")

}

// 三. 循环
// 1. while
var i = 10
while i < 100 {
    i++
}

// 2. do...while
// repeat...while
repeat {

    i++

} while i < 200


// 3. for循环
for var i = 0; i < 100; i++ {

   i++

}

// 赋值语句, 无返回值

// 四. 函数
// func 函数名 (参数列表) ->返回值 { 函数体 }

func sayHello() {

    print("Hello, Swift")

}
sayHello()

// 1. 有参单返回
func sayHello(name1:String, name2:String)->String {

    return "呵呵" + name1 + name2

}
var result = sayHello("老高", name2: "✈️")


func sumNumber(inout a : Int, b : Int) -> Int {
    a = 100
    return a + b

}
var a = 10
sumNumber(&a, b: 12)
a

// 2. 有参数无返回
func sayHello(name:String) {

print("呵呵\(name)")

}
sayHello("老高")

func printName(name : String) {

    print("Hello, " + name);

}
printName("张三")


// 3. 无参数有返回
func sayHello1()->String {

     return "呵呵"

}
var result1 = sayHello1()

// 4. 无参数无返回
func sayHello2() {

    print("Hello, Swift")

}
sayHello2()

// 5. 有参数多返回
func returnStudent(name : String, sex : String, age : Int) -> (name : String, sex : String, age : Int) {

    return (name, sex, age)

}


var (name1, sex1, age1) = returnStudent("骚动", sex: "男", age: 11)
name1
age1
sex1


// 6. 无参数多返回
func returnWH() -> (name3 : String, age3 : Int) {

    return ("张三", 13)

}
returnWH()


// 冒泡排序
var maoPaoArr = [123, 23, 34, 4.5, 93.4, 45, 32, 5]
for item in maoPaoArr {
    var i = item
    print(i)
}

for var i = 0; i < maoPaoArr.count - 1; ++i {

    for var j = 0; j < maoPaoArr.count - 1; ++j {
        if maoPaoArr[j] > maoPaoArr[j + 1] {

            var temp = maoPaoArr[j + 1]
            maoPaoArr[j + 1] = maoPaoArr[j]
            maoPaoArr[j] = temp

        }
    }  
}


print("排序后的值: ")

for item in maoPaoArr {

    var i = item
    print(i)

}
maoPaoArr


// 闭包 匿名函数
// {(参数列表) ->返回值类型 in 代码段}
let block = { (str : String) ->String in return str

}
block("大水杯" + "����" + "大手表")


// 五. 类和结构体
// 1. 类

class Person {
    // 属性 计算属性(set get) 和 监听属性(willset didset)
    // 1. 属性可以直接赋初值
    // 2. 属性的值可以不确定
    var name : String?
    var age : Int?

    // 构造器 相当于 alloc init
    init(name : String, age : Int) {

        self.name = name
        self.age = age

    }

    func printAge() {

        print(self.age!)

    }

    // 析构器 相当于 delloc
    deinit {

        // 释放资源
        // 监听 代理

    }
}

let per = Person(name: "s", age: 18)
per.printAge()


// 2. 结构体
struct Car {
    var carName : String?
    var carNumber : Int?

    init(carName : String, carNumber : Int) {
        self.carName = carName
        self.carNumber = carNumber
    }

    // 结构体不包含析构器
//    deinit {
//    
//    
//    }

}

/**
* 类与结构体的区别
* 相同点:
*   1. 都包含属性和方法, Swift的结构体与C语言的结构体有很大的区别
*   2. 都包含构造器方法
* 不同点:
*   1. 类可以被继承, 结构体不能
*   2. 类包含析构器, 结构体没有
*/


class Student: Person {

    var sex : String?
    // 重写/重载 父类的初始化方法
    override init(name : String, age : Int) {
        // super关键字, 调用父类的方法
        super.init(name: name, age: age)
    }

    init(StudentName : String, age : Int, studentNumber : Int, studentSex : String) {

        super.init(name: StudentName, age: studentNumber)
        self.sex = studentSex;   
    }
    // class修饰方法 即为类放大
    class func printName(name : String) {
        print(name)
    }
}
Student.printName("修睿")


// 协议, protocol 协议名 {}
protocol personDelegate {

    func change() ->String

}

// 签订协议时: 
// 1. 如果类有继承关系, 在所继承的类后以','分割去签订协议
// 2. 如果没有继承关系, 直接在: 后去签订协议
class teacher: Person, personDelegate {

    func change() -> String {
        return "name"
    } 
}


// 定义简单控件(UIButton)
// 设置属性
var myButton : UIButton?

self.myButton = UIButton(type: .Custom)
self.myButton.frame = CGRect(x: 50, y: 100, width: 200, height: 100)
self.myButton.setTitle("点我", forState: .Normal)
self.myButton.backgroundColor = UIColor.grayColor()
self.view.addSubview(self.myButton!)
self.myButton.addTarget(self, action: "tap:", forControlEvents: .TouchUpInside)


func tap(sender : AnyObject) {
        print("点我")        
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值