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

简介: //// main.swift// LessonSwift-03//// Copyright (c) 2015年 韩俊强. All rights reserved.//import Foundation// 声明一个类, 我们用class关键字修饰// 类可以被继...
//
//  main.swift
//  LessonSwift-03
//

//  Copyright (c) 2015年 韩俊强. All rights reserved.
//

import Foundation

// 声明一个类, 我们用class关键字修饰
// 类可以被继承, 它是引用类型
class Student {
    var name = "小米"
    var gender = "男"
    var age = 18
}
// 创建一个student实例
let studnet = Student()
let student2 = studnet
// 如何判断两个实例是否一样
if studnet === student2{
    println("两个实例一样, 都操作的同一块内存")
}else{
    println("两个实力不一样")
}

// 在类中,判断两个实力是否相等, 用 === ,不相等用 !==
let student3 = Student()
if student3 !== studnet {
    println("不一样")
}else{
    println("一样")
}

// 声明结构体我们用struct关键字
struct Person {
    var name : String
    var age : Int
}
var person = Person(name: "小妹妹", age: 19)
var person2 = person
// 结构体中,不能判断两个实例是否相等
//if person === person2 {
//
//}

// 属性
// 根据调用对象的不同, 属性可以分为类属性, 还有实例类型属性
// 根据功能的不同, 属性可以分为存储属性 和 计算属性
struct Animal {
    // 这两个属性是对象来调用的, 是实例属性
    // 这两个属性是用来存储值的, 是存储属性
    var typeName : String
    var isFly : Bool
}
// 创建一个实例
var dog = Animal(typeName: "泰迪", isFly: false)
// 该属性的作用是存储值, 调用的对象是实例
dog.typeName = "藏獒"
println(dog.isFly)


class Human {
    var name : String!
    var age : Int!
    
    // 延迟存储属性
    // 延迟存储属性用lazy修饰, 而且必须是可变的, 也就是说要用var 来修饰变量, 还要给初值, 什么时候创建, 就和我们oc中的懒加载一样
    lazy var cat : Animal = Animal(typeName: "波斯猫", isFly: true)
    
}
let aHumen = Human()
// 调用该属性的时候, 才会被创建
aHumen.cat.typeName = "加菲猫"
println(aHumen.cat.typeName)

// 计算属性
class CoolPerson {
    var name : String!
    var age : Int!
    
    // 有set get方法, 或者只有get方法的属性叫做计算属性, 计算属性不能给属性赋值, 只能给其他属性赋值
    var countProperty : String{
        set {
            // newValue 就是系统在set方法中为我们提供的一个新值, 也就是我们给该属性赋的值
            println(newValue)
            name = newValue

        }
        get {
            // 把值给我们的计算属性
            return "\(name)" + "好帅"
        }
    }
}
let 小妹妹 = CoolPerson()
小妹妹.countProperty = "朱丽叶"
println(小妹妹.name)
println(小妹妹.countProperty)



class Teacher {
    var name = "小花"
    var age = 19
    // 只有get方法的属性就叫只读属性, 不能给该属性赋值
    var gender : String {
//        get {
//            return "男"
//        }
        // 简洁写法
        return "男"
    }
}
// 创建一个实例
let 小花 = Teacher()
//小花.gender = "女"

// 属性观察器
class Bird {
    var isFly : Bool!
    var age : Int! {
    
    willSet {
    // 属性将要被赋值的时候会走的方法
    // newValue 是新值
    println("newValue = \(newValue)")
    
    }
    didSet {
    // 属性已经被赋值的时候会走该方法
    println("oldValue = \(oldValue)")
    
       }
   }
}
let aBird = Bird()
aBird.age = 19


// 类属性
struct Desk {
    // 结构体中的属性我们用static修饰
    // 结构体中的类属性, 我们要给它赋初始值
    static var price : Float = 2
    static var numbers : Int = 1
    static var totalPrice : Float {
        set {
        // newValue 的类型和 totalPrice一致
            numbers = Int(newValue)
        }
        get {
            return Float(numbers) * price
            
        }
    }
}
// 类属性通过类名调用
Desk.numbers = 10
println("总价格 == \(Desk.totalPrice) 元")


// 类的类属性
class Fruit {
    // 类的类属性用class关键字来修饰, 并且只能修饰计算属性
    class var name : String {
    get {
    return "hello"
    }
   
   }
}
println(Fruit.name)

// 方法
// 按照调用对象的不同, 方法可以分为类方法和实例方法
class Plane {
    // 实例方法
    func canFly() {
        println("我会飞")
    }
}
let plan = Plane()
plan.canFly()

struct Ship {
    // 实例方法
    func canShip() {
        println("我会在水里跑")
    }
}
let ship = Ship()
ship.canShip()

// 类方法
struct Man {
    // 结构体中的类方法, 我们用static来修饰
    static func playLOL() {
        println("男人喜欢LOL")
    }
}
// 通过 类名.方名 的方式调用类方法
Man.playLOL()
// 类中的类方法我们用class来修饰, 通过 类名.方法名 的方式来调用
class Women {
    class func shopping() {
        println("败家")
    }
}

// 继承
// 没有继承类叫基类, 也叫做超类
class YaPei {
    var name = "亚培"
    var age = 23
    var description : String {
        println("\(name) 年龄 \(age) 喜欢逛淘宝")
        return "\(name) 年龄 \(age) 喜欢逛淘宝"
    }
    // 如果一个类的属性或者方法不想被继承, 我们可以在方法或者属性前面加关键字 final , 如果整个类都不想被继承 就在 class前面加 关键字 final
   final func infoOfYaPei(){
        println("这是个基类的方法");
    }
}
class SonOfYaPei: YaPei {
    
    // 不能重写存储属性
//    override var name = "小花"
    // 我们只能重写计算属性, 用override来修饰
    override var description : String {
        return "\(name) 的子类"
    }
//    override func infoOfYaPei() {
//        println("重写了父类的方法,这是子类的方法")
//    }
    
}
let pei = YaPei()
println(pei.description)
pei.infoOfYaPei()


// 构造方法
class Monkey {
    var name : String
    var gender : String
    var age : Int
    // 构造方法, 通过构造方法我们要保证每一个没有值的属性被赋值
    init(name : String,age : Int,gender : String) {
        // 如果属性名和参数名一样, 这个时候我们的属性名前面一定要加self
        // 我们要确保调用过构造方法以后, 该实例的每一个属性都有值
        self.name = name
        self.gender = gender
        self.age = age
    }
}
let 孙悟空 = Monkey(name: "悟空", age: 8, gender: "未知")
println((孙悟空.name,孙悟空.age,孙悟空.gender))

class 金刚 : Monkey {
    var hobby : String
    // 必须在调用父类的构造方法前, 先给子类的没有赋值的属性赋值
    init(name: String, age: Int, gender: String,hobby : String) {
    self.hobby = hobby
    super.init(name: name, age: age, gender: gender)
      
    }
}

let AC = 金刚 (name: "猴子`", age: 12, gender: "nan", hobby: "玩耍")

// 析构
class BadEgg {
    var shape : String!
    var color : String!
    // 析构方法类似于OC里面的dealloc 方法, 当实例的引用计数器为0的时候会走的方法
    deinit {
        println("egg --- dead")
    }
    
}
// 创建一个实例
var anEgg : BadEgg? = BadEgg()
var anotherEgg : BadEgg? = BadEgg()
anEgg = nil
anotherEgg = nil

// 自动引用计数机制
// 在Swift当中也是使用自动引用计数机制来管理内存(ARC)
// 引用技术机制仅仅应用于类的实例, 而结构体是值类型, 有不同的方式来存储和传递值, 结构体没有引用计数机制
// Swift直接使用ARC, 会在类的实例不再使用的时候走deinit(析构)方法
// Swift中的ARC机制: 这块空间如果只是一个指针指向, 那么我们把这个指针置为nil, 这块空间就会释放掉, 如果有多个指针指向, 那么我们需要把所有的真想这块空间的指针置为nil,这块空间才会释放



每日更新关注:http://weibo.com/hanjunqiang  新浪微博
目录
相关文章
|
29天前
|
安全 Swift iOS开发
Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法
本文深入探讨了 Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法。Swift 以其简洁、高效和类型安全的特点,结合 UIKit 丰富的组件和功能,为开发者提供了强大的工具。文章从 Swift 的语法优势、类型安全、编程模型以及与 UIKit 的集成,到 UIKit 的主要组件和功能,再到构建界面的实践技巧和实际案例分析,全面介绍了如何利用这些技术创建高质量的用户界面。
29 2
|
1月前
|
安全 数据处理 Swift
深入探索iOS开发中的Swift语言特性
本文旨在为开发者提供对Swift语言在iOS平台开发的深度理解,涵盖从基础语法到高级特性的全面分析。通过具体案例和代码示例,揭示Swift如何简化编程过程、提高代码效率,并促进iOS应用的创新。文章不仅适合初学者作为入门指南,也适合有经验的开发者深化对Swift语言的认识。
48 9
|
1月前
|
Swift iOS开发 UED
如何使用Swift和UIKit在iOS应用中实现自定义按钮动画
本文通过一个具体案例,介绍如何使用Swift和UIKit在iOS应用中实现自定义按钮动画。当用户点击按钮时,按钮将从圆形变为椭圆形,颜色从蓝色渐变到绿色;释放按钮时,动画以相反方式恢复。通过UIView的动画方法和弹簧动画效果,实现平滑自然的过渡。
56 1
|
1月前
|
安全 API Swift
探索iOS开发中的Swift语言之美
【10月更文挑战第23天】在数字时代的浪潮中,iOS开发如同一艘航船,而Swift语言则是推动这艘船前进的风帆。本文将带你领略Swift的独特魅力,从语法到设计哲学,再到实际应用案例,我们将一步步深入这个现代编程语言的世界。你将发现,Swift不仅仅是一种编程语言,它是苹果生态系统中的一个创新工具,它让iOS开发变得更加高效、安全和有趣。让我们一起启航,探索Swift的奥秘,感受编程的乐趣。
|
2月前
|
Swift iOS开发 UED
如何使用Swift和UIKit在iOS应用中实现自定义按钮动画
【10月更文挑战第18天】本文通过一个具体案例,介绍如何使用Swift和UIKit在iOS应用中实现自定义按钮动画。当用户按下按钮时,按钮将从圆形变为椭圆形并从蓝色渐变为绿色;释放按钮时,动画恢复原状。通过UIView的动画方法和弹簧动画效果,实现平滑自然的动画过渡。
58 5
|
2月前
|
安全 Swift iOS开发
探索iOS开发中的Swift语言之美
在数字时代的浪潮中,移动应用已成为日常生活的延伸。本文将深入探讨iOS平台上的Swift编程语言,揭示其背后的设计哲学、语法特性以及如何利用Swift进行高效开发。我们将通过实际代码示例,展示Swift语言的强大功能和优雅简洁的编程风格,引导读者理解并运用Swift解决实际问题。
|
2月前
|
开发框架 移动开发 Android开发
安卓与iOS开发中的跨平台解决方案:Flutter入门
【9月更文挑战第30天】在移动应用开发的广阔舞台上,安卓和iOS两大操作系统各自占据半壁江山。开发者们常常面临着选择:是专注于单一平台深耕细作,还是寻找一种能够横跨两大系统的开发方案?Flutter,作为一种新兴的跨平台UI工具包,正以其现代、响应式的特点赢得开发者的青睐。本文将带你一探究竟,从Flutter的基础概念到实战应用,深入浅出地介绍这一技术的魅力所在。
92 7
|
3月前
|
安全 Swift iOS开发
探索iOS开发之旅:Swift语言的魅力与挑战
【9月更文挑战第21天】在这篇文章中,我们将一起潜入iOS开发的海洋,探索Swift这门现代编程语言的独特之处。从简洁的语法到强大的功能,Swift旨在让开发者能够以更高效、更安全的方式构建应用程序。通过实际代码示例,我们会深入了解Swift如何简化复杂任务,并讨论它面临的挑战和未来的发展方向。无论你是初学者还是有经验的开发者,这篇文章都将为你提供新的视角和知识。
49 4
|
3月前
|
安全 编译器 Swift
探索iOS开发之旅:Swift编程语言的魅力与挑战
【9月更文挑战第5天】在iOS应用开发的广阔天地中,Swift作为苹果官方推荐的编程语言,以其简洁、高效和安全的特点,成为了开发者的新宠。本文将带领你领略Swift语言的独特魅力,同时探讨在实际开发过程中可能遇到的挑战,以及如何克服这些挑战,成为一名优秀的iOS开发者。
|
3月前
|
设计模式 前端开发 Swift
探索iOS开发:Swift与Objective-C的较量
在这篇文章中,我们将深入探讨iOS开发的两大编程语言——Swift与Objective-C。我们将分析这两种语言的特性、优势和局限性,并讨论它们在现代iOS开发中的应用。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和建议。
66 3