- 开发者的第一份 Swift 语言中文学习指南 Swift 学习指引
- Swift 2.2 开发者文档 Swift2.2 英文学习文档
- 关于Swift 中文学习文档(+38页对比参考) Swift2.2 中文学习文档
- 关于 Swift 2.2 学习
- Swift 2.2 学习_01:常量与变量、dynamicType(类型)、元组类型、可选类型(?!)、类型别名(typealias)、字符串、循环控制流(for_in)、条件选择(if\switch)
- Swift 2.2 学习_02:函数类型示例、闭包运用、数组、集合、字典、类
- Swift 2.2 学习_03:枚举类型、类与结构体、属性、实例化方法与类型方法、继承、析构器和构造器、扩展方法、协议
Switf2.2 学习
Swift 是一种新的编程语言,用于编写 iOS,OS X 和 watchOS应用程序。Swift 结合了 C 和 Objective-C 的优点并且不受 C 兼容性的限制。Swift 采用安全的编程模式并添加了很多新特性,这将使编程更简单,更灵活,也更有趣。
Switf2.2 学习_01
let 公司名称 = "AAA";
print(公司名称)
var age = 20
age = 21
公司名称.dynamicType
age.dynamicType
var width: Float
width = 100.0
Int 整形
String 字符串
Float 单精度浮点型
Double 双精度浮点型
BOOL 布尔类型
var isLogin: Bool
isLogin = false
isLogin.dynamicType
var islogin = false
islogin.dynamicType
var 学生信息 = (姓名:"AAA",年龄:20,毕业院校:"中国")
学生信息.dynamicType
英雄联盟信息 = ("群魔觉臭","艾欧尼亚",30,"最强王者")
英雄联盟信息.0
英雄联盟信息.1
英雄联盟信息.2
英雄联盟信息.3 = "大师你懂得"
英雄联盟信息
学生信息.姓名
学生信息.年龄
学生信息.毕业院校
let (角色名称,大区,等级,段位) = 英雄联盟信息
角色名称
大区
等级
段位
var name_1: String = "Admin"............................
var name_2: String? = "Admin"............................
print(name_2)............................
if name_2 != nil{
print(name_2!) ............................
}
if let name = name_2 {
print(name)............................
}
var name_3: String! = "Admin" ............................
if name_3 != nil{
print(name_3) ............................
}
* 总结: 显示可选类型('?')与隐式可选类型('!')的共同点在于都可将变量置为nil,不同点在于显示可选类型需要使用'!'解析数据,而隐式可选类型无需使用'!'解析数据
typealias HTInt = Int
var a: HTInt = 10
a.dynamicType ..............
// 1. 创建一个空的字符串
let str_1: String
var str_2 = ""
var str_3 = String()
======================================================
// 2. 可变/不可变字符串
str_1 = "123"
//str_1 ="789" // let 声明的常量只能被初始化一次
str_2 = "ABCD"
======================================================
// 3.字符串长度 or 是否为空
str_2.characters.count //获取长度
str_2.isEmpty
str_3.isEmpty
======================================================
// 4. 字符串的拼接
str_3 = str_2 + "F"
var str = str_2 + "F"
str.append(Character("G")
str.append(CharacterOf("HIJ")
//str.stringByAppendingString(<aString: String)
//str.stringByAppendingFormat(format: String, arguments: CVarArgType)
======================================================
// 5. 字符串索引
//successor() 当前下标
str.startIndex.successor().successor()
//predecessor() 当前下标 - 1
str.endIndex.predecessor()
======================================================
// 6. 字符串的插入
str.insert("!", atIndex: str.endIndex)
str.insert("@", atIndex: str.endIndex.advancedBy(-8))
str.insertContentsOf("???".characters, at: str.endIndex)
======================================================
// 7. 字符串的截取
var tmp = str.substringToIndex(str.endIndex.advancedBy(-8))
tmp = tmp.substringFromIndex(str.startIndex.successor())
//截取范围
//a...b : [a,b]
//a..<b : [a,b)
let range = tmp.startIndex.successor()...tmp.endIndex.advancedBy(-2)
tmp.substringWithRange(range)
======================================================
//课堂练习:截取身份证的年月日
var IDCard = "510122199123456789"
let rang_1 = IDCard.endIndex.advancedBy(-12)...IDCard.endIndex.advancedBy(-5)
IDCard.substringWithRange(rang_1)
let rang_2 = IDCard.startIndex.advancedBy(6)..<IDCard.endIndex.advancedBy(-4)
IDCard.substringWithRange(rang_2)
======================================================
// 8. 字符串的删除
//tmp.removeRange(<#T##subRange: Range<Index>##Range<Index>#>)
//tmp.removeAtIndex(<#T##i: Index##Index#>)
//tmp.removeAll()
======================================================
// 9. 字符串的比较
// && || !
let account = "admin"
let password = "123"
if account == "admin" && password == "123"{
print("登陆成功!")
}else{
print("登录失败!!")
}
======================================================
// 10. 字符串查询
let net = "www.baidu.com"
//查询是否包含
net.containsString("baidu")
//查询首部
net.hasPrefix("www")
//查询尾部
net.hasSuffix("com")
var sum = 0
for idx in 0...100{
sum += idx
}
print(sum)
======================================================
sum = 0
var idx = 0
while idx <= 100 {
sum += idx
idx += 1
}
sum
======================================================
idx = 0
sum = 0
repeat {
sum += idx
idx += 1
}while idx <= 100
sum
let flag = 1
switch flag{
case 1 :
print("星期一")
case 2 :
print("星期二")
case 3 :
print("星期三")
case 4 :
print("星期四")
case 5 :
print("星期五")
case 6,7 :
print("周末")
default :
print("异常信息")
}
======================================================
let point = (0,10)
//'_'占位符 用户忽略某些特定的内容
switch point{
case (0,0) :
print("在原点")
case (0,_) :
print("在Y轴")
case (_,0) :
print("在X轴")
default :
print("异常信息")
}
======================================================
let 描述 = "四大天王"
switch 描述{
case "四大天王" :
print ("刘德华,张学友,郭富城,黎明")
case "小虎队" :
print ("苏有朋,陈志明,吴奇隆")
case "东北F4" :
print ("小沈阳,宋小宝,赵四,刘能")
default :
print ("异常信息")
}
Switf2.2 学习_02
// func 关键字
// 1、函数形式
func 函数名称(参数) -> 返回值 {
函数体
}
======================================================
// 2、函数示例
// 2.1、无参数无返回值
func sayHello() {
print("Hello!")
}
sayHello()
// 2.2、有参数无返回值
func sayHelloWith(name: String) {
print("Hello, \(name)!")
}
sayHelloWith("Tom")
// 2.3、有参数有返回值
func sumOf(a: Int, b: Int) -> Int {
return a + b
}
sumOf(10, b: 20)
======================================================
// 3、外部参数
// func 函数名(外部参数名 内部参数名:参数类型...)
// 默认情况下,程序会为函数除第一个参数之外的所有参数设置外部参数,外部参数名字和内部参数的名字默认情况下是一致的。
// 设置默认参数只需在参数后面赋值即可,如下面的‘是否加密’参数
func isLogin(账号 account: String, 密码 password: String, 是否加密 isEncryption: Bool = true) -> Bool {
if account == "Admin" && password == "123" {
return true
}else {
return false
}
}
isLogin(账号: "Admin", 密码: "123", 是否加密: true) //.....true
isLogin(账号: "Admin", 密码: "123") //.....true
// 可通过‘_’忽略外部参数
func maxOf(a: Int, _ b: Int) -> Int {
return a > b ? a : b
}
maxOf(10, 20)
// 4、函数返回值
// 返回元组类型的值(返回多个值)
let nums = [3, 0, 9, 4, 6, 2]
func maxAndMinWith(nums: [Int]) -> (Int, Int) {
var min = nums[0]
var max = nums[0]
for idx in 0..<nums.count {
min = nums[idx] < min ? nums[idx] : min;
max = nums[idx] > max ? nums[idx] : max
}
return (min, max)
}
let (min, max) = maxAndMinWith(nums)
min // = 0
max // = 9
// 5、函数类型
// sumOf: (Int, Int)->Int
// maxAndMinWith: ([Int])->(Int, Int)
// sayHello: ()->Void
// 6、函数类型作为函数参数类型
func maxInThreeNum(a: Int, b: Int, c: Int, function: (Int, Int) ->Int) -> Int {
var max = function(a, b)
max = function(max, c)
return max
}
maxInThreeNum(1, b: 7, c: 3, function: maxOf)
// 1、形式:{(参数列表)-> 返回值 in 闭包体}
var sum = {(a: Int, b: Int)->Int in
return a + b
}
sum(10, 20)
// 2、闭包简写形式
// 2.1、省略类型与返回值
sum = {a, b in
return a + b
}
sum(10, 20)
// 2.2、$+下标表示第几个参数;
sum = {
return $0 + $1
}
sum(10, 20)
// 3、案例:通过闭包实现传值
class ViewController {
func viewDidLoad() {
let detailVc = DetailViewController()
detailVc.getInfo { (account, password) in
print("\(account), \(password)")
}
}
}
class DetailViewController {
func getInfo(info: (String, String)->Void) { info("Admin", "123") } } let vc = ViewController() vc.viewDidLoad()
var arr_0: Array<Int>
var arr_1: [Int]
var arr_2: [AnyObject]
var arr_3 = [Int]()
var arr_4 = Array<Int>()
var numbers = [1, 2, 3, 4, 5]
numbers.isEmpty
numbers.count
numbers[0]
numbers[0] = 8
for idx in 0..<numbers.count {
print(numbers[idx])
}
for value in numbers {
print(value)
}
for (idx, value) in numbers.enumerate() {
print("\(idx) = \(value)")
}
numbers.append(6)
numbers.insert(0, atIndex: 0)
numbers[2...4] = [7, 8, 9]
numbers
numbers[0...2] = [1, 2]
numbers
numbers[3...5] = []
numbers
arr_0 = [1, 2]
arr_1 = [3, 4, 5]
numbers = arr_0 + arr_1
numbers
var set_1: Set<String>
var set_2 = Set<String>()
var sets: Set = ["刘德华", "郭富城", "黎明", "张学友"]
sets.count
sets.isEmpty
for value in sets {
print(value)
}
sets.contains("刘德华")
sets.insert("周杰伦")
sets.remove("刘德华")
===============================
let sets_01: Set = [1, 2, 3, 4]
let sets_02: Set = [2, 3, 4, 5]
sets_01.union(sets_02).sort()
sets_01.intersect(sets_02).sort()
sets_01.exclusiveOr(sets_02).sort()
var dict_1: [String:String]
var dict_2 = [String: AnyObject]()
var 学生信息 = ["姓名":"小x", "年龄":21, "单位": "XX科技"]
学生信息.count
学生信息.isEmpty
学生信息["姓名"]
学生信息["姓名"] = "卡特琳娜"
学生信息["联系方式"] = 9090980
print(学生信息)
for (key, value) in 学生信息 {
print("\(key):\(value)")
}
[String](学生信息.keys)
[NSObject](学生信息.values)
学生信息.removeValueForKey("联系方式")
学生信息.updateValue(18, forKey: "年龄")
class Person {
var name: String!
var age: Int!
var IDCard: Int!
var address: String!
}
class Teacher: Person {
var 科目: String!
}
let tea = Teacher(
tea.name = "AAA"
tea.age = 18
tea.科目 = "iOS/ Swift 开发"
tea.name
tea.age
class Student {
var name = ""
var age = 0
func buyWater() {
print("老师,水已经买好了!")
}
class func buyBooks() {
print("老师,书已经买好了!")
}
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
Student.buyBooks()
let stu = Student(name: "Admin", age: 23)
stu.buyWater()
stu.name
Switf2.2 学习_03
enum 方向 {
case 东方
case 南方
case 西方
case 北方
}
enum 四大天王 {
case 刘德华, 郭富城, 张学友, 黎明
}
var 逃亡的方向 = 方向.东方
逃亡的方向 = .南方
switch 逃亡的方向 {
case .南方:
print("南方!")
case .北方:
print("北方!")
case .西方:
print("西方!")
case .东方:
print("东方!")
}
switch 逃亡的方向 {
case .东方:
print("安全!")
default:
print("不安全!")
}
class Person {
var name = ""
var age: Int!
func sayHi() {
print("Hi")
}
final func buySomthing() {
}
}
struct CGPoint {
var x = 0.0
var y = 0.0
}
let person = Person()
let point = CGPoint(x: 100, y: 100)
person.name
point.x
var p1 = point
p1.x
p1.y
p1.x += 10
p1.x
point.x
person.name = "Tom"
person.age = 22
let per_1 = person
per_1.name
per_1.age
per_1.age = 28
person.age
class Dog {
let id = 0
var name: String!
lazy var color = "黄色"
var age: Int!
var yearOfBirth: Int {
get {
return 2016 - self.age
}
set {
self.age = 2016 - newValue
}
}
var food: String {
return "狗粮"
}
static var 编号: Int = 0
}
struct CGSize {
let width = 120.0
var height = 0.0
static var 编号: Int = 0
}
Dog.编号 = 1001
CGSize.编号 = 1002
let size = CGSize(height: 100.0)
let dog = Dog()
dog.name = "小黄"
dog.age = 3
dog.yearOfBirth
dog.yearOfBirth = 2008
print(dog.age)
class ToolsInClass {
func sayHi(name: String) {
print("Hi, \(name).")
}
class func sayHello() {
print("Hello, world!")
}
}
struct ToolsInStruct {
var x = 0, y = 0
mutating func moveByX(x: Int, y: Int) {
self.x += x
self.y += y
}
func sayHi(name: String) {
print("Hi, \(name).")
}
}
let toolInClass = ToolsInClass()
var toolInStruct = ToolsInStruct(x: 10, y: 10)
toolInClass.sayHi("Tom")
toolInStruct.sayHi("Tom")
toolInStruct.moveByX(3, y: 7)
toolInStruct.x
toolInStruct.y
ToolsInClass.sayHello()
func swap(inout a: Int, inout b: Int) {
let tmp = a
a = b
b = tmp
}
var a = 10
var b = 20
swap(&a, b: &b)
a
b
class Student: Person {
override func sayHi() {
print("Hi, Girl!")
}
}
let stu = Student()
stu.name = "Petter"
stu.age = 20
stu.sayHi()
class Tool {
var value: Int! {
willSet {
print("将要设置‘value’属性!其值为\(newValue)")
}
didSet {
print("已经设置‘value’属性,设置之前的值为\(oldValue)")
}
}
init() {
print("有一个对象正在创建!")
}
deinit {
print("有一个对象已经销毁!")
}
}
var tool: Tool! = Tool()
extension Tool {
var code: Int {
get {
return 1001
}
}
func buyBooks() {
print("买书!")
}
}
tool.buyBooks()
tool.code
tool.value = 10
tool.value = 20
protocol 协议名称 {
var money: Int { get set}
func buySomking()
}
class Teacher: Person, 协议名称{
var money: Int {
set {
}
get {
return 100
}
}
func buySomking() {
print("买零食!")
}
}
@objc protocol 可选协议 {
optional func buyWater()
}
class Cat: 可选协议 {
}