//1.Swift可以定义枚举,结构体,类,3种面向对象的类型,面向对象的两大核心是类和对象
//2.面向对象编程的3大特征,封装,继承(Swift使用协议弥补了单继承灵活性不足的缺点),多态
//3.C语言中结构体和枚举不具有面向对象的特征,Swift中多了结构体和枚举这两种程序单元


//1.枚举
//Swift的枚举不像c那么简单,是完全重新定义的类型,支持计算属性,实例方法,类型方法,支持定义构造器来完成初始化,允许通过扩展来增强原有枚举的功能,允许遵守指定协议来提供标准的功能
//1.1定义枚举,使用enum
//语法格式,枚举名首字母大写
/** * enum 枚举名 { //使用case关键字列出所有的枚举值 //枚举的其他成员 } */
enum People
{
    //每一个case定义一个枚举实例
    case Man
    case Female
}

enum StrongPeople
{
    //一个case 定义多个枚举实例
    case Man,Female
}

/** * 面向对象编程的五大点(牢记) 1,声明变量 2.创建实例 3,访问类型属性 4调用类型方法 5,派生子类,但是Swift只有类支持继承,枚举和结构体不支持继承 */

//使用枚举声明变量
var manPeople :StrongPeople
//赋值
manPeople = StrongPeople.Man
//当Swift能推断出枚举类型时,允许省略枚举名前缀
//manPeople = .Man
println(manPeople)

//1.2枚举值和switch语句
var choosePeople = StrongPeople.Man
//使用switch语句判断枚举
//是个男的
switch (choosePeople)
{
case StrongPeople.Man:
    println("是个男的")
case StrongPeople.Female:
    println("是个女的")
}

//带有原始值的枚举
//需要注意的是,Swift可以通过已指定的原始的枚举来推断它前后的枚举值
/** * enum 枚举名 : 原始类型 { case 枚举值 = 原始值 } */

//定义枚举,原始值类型为Int
enum Weekday : Int
{
    //使用一个case,swift推断Monday= 0,Thursday = 6,Friday = 7
    case Monday,Tuesday = 1,Wednesday = 5,Thursday,Friday
}

//如果指定的原始值类型不是Int,而是String,Character,Swift不能推断枚举的原始值
enum Season : Character
{
    case Spring = "S"
    case Summer = "U"
}

var day = Weekday.Monday
//获取枚举值的原始值
println("\(day.rawValue)")//0
day = .Thursday
println("\(day.rawValue)")//6

//根据原始值获取枚举值
//is U
var mySea = Season(rawValue: "S")
if mySea != nil
{
    switch mySea!
    {
    case .Spring:
        println("is U")
    case .Summer:
        println("is S")
    }
}

//rawValue是枚举值的属性,该属性用于获取枚举的原始值

//关联值,Swift不要求各枚举成员具有相同的关联值 associated value
/** * 语法格式 case 枚举值(元组语法) */
//定义枚举
enum Plant
{
    //不同枚举值可以携带数量不等,类型不等的关联值
    case Mercury(weight:Double,density:Double,name:String)
    case valus(Double,Double)
    case Jupiter
    case Saturn
}

//引用类型的比较
//===,!==返回true,false

//self关键字

class Dog1
{
    //实现一个jump的方法
    func jump()
    {
        println("正在jump")
    }

    //实现一个跑的方法
    func run()
    {
        jump()
// self.jump()
        println("正在跑")
    }
}


//局部变量隐藏存储属性
class Wolf
{
    //定义两个属性
    var name : String = ""
    var age : Int = 2
    //显示定义带参数的构造器
    init (name :String,age : Int)
    {
        //当局不变量隐藏存储属性时
        //可用self代表调用该构造器正在初始化的实例
        //这个可以为该构造器正在初始化的实例的存储属性赋值

        self.name = name
        self.age = age
    }
    //定义一个info
    func info()
    {
        println("\(name),\(age)")
    }
}
var wolf = Wolf(name:"JiangJum",age: 24)
wolf.info()//JiangJum,24

//当self作为方法的调用者
class ReturnSelf
{
    var age : Int = 0
    func grow() -> ReturnSelf
    {
        age++
        return self
    }
}
var rt = ReturnSelf()
rt.grow()
    .grow()
    .grow()

println("\(rt.age)")//3

struct FixedLengthRange {
    var strat :Int
    let length : Int
    //由于系统会为该结构体提供初始化所有存储属性的构造器
    //因此程序可以在定义时不为实例存储属性指定初始值

}

//初始化
var rg = FixedLengthRange(strat: 2,length: 3)
println("\(rg.strat),\(rg.length)")//2.3

rg.strat = 5
//rg.length = 6//常量存储属性,无法重新赋值

struct FkRange {
    //定义两个变量存储属性
    var start : Int
    var length : Int
}

let rg1 = FkRange(start: 3,length: 4)
println("\(rg1.start),\(rg1.length)")//3,4
//rg1.strat = 4//编译错误
//由于实例被赋值给一个let声明的常量,因此FkRange就是一个不可变的,不允许修改


//lazy load 懒加载
class Dept3
{
    var id : Int
    var info : String
    init (id : Int)
    {
    self.id = id
        //暂停2秒
        NSThread.sleepForTimeInterval(2)
    self.info = "模拟读取数据"
    }
}

class User {
    var id : Int = 0
// var dept = Dept3(id: 4)
    lazy var dept = Dept3(id: 3)
    var nicks = [String]()
}
//创建user实例
var user = User()
user.nicks.append("JiangJun")
user.nicks.append("jiangjum")
println(user.nicks)

Swift学习笔记-面向对象的更多相关文章

  1. three.js模拟实现太阳系行星体系功能

    这篇文章主要介绍了three.js模拟实现太阳系行星体系功能,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

  2. HTML5页面无缝闪开的问题及解决方案

    这篇文章主要介绍了HTML5页面无缝闪开方案,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  3. ios – 为什么,将nil作为参数从Objc C发送到swift类初始化器,用新对象替换nil参数

    除非属性本身被声明为nonnull:

  4. ios – 在Swift中对MKCircle进行子类化

    我想通过添加另一个String属性来继承MKCircle,我们称之为“代码”.这个属性不是可选的和常量的,所以我必须从初始化器设置它,对吧?有没有办法定义一个单一的便利初始化器,在这种情况下需要3个参数?本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. ios – AVAudioPlayer不再使用Swift 2.0/Xcode 7 beta

    对于我的iPhone应用程序中的vartestAudio声明,我在这里收到错误“调用可以抛出,但错误不能从属性初始化程序中抛出”当我转到Xcode7测试版时,就发生了这种情况.如何在Swift2.0中使用此音频剪辑?

  6. ios – 斯威夫特.在初始化所有存储的属性之前在方法调用中使用’self’

    解决方法在初始化所有非可选实例变量之前,您无法在self上调用方法.有几种方法可以解决这个问题.>将属性更改为选项或隐式解包选项(不建议)>使buildCircle()方法静态或只是一个在文件中运行并为所有圆圈调用addSubview()在所有属性初始化并且您调用之后super.init()等等.你必须避免在自己之前打电话给自己class已初始化.

  7. ios – Objective-C警告未找到超类“-init”的指定的初始化程序的方法覆盖

    我在一个应用程序中清理警告,我收到了两次这个警告对于这行代码和这一行我相当新的Objective-C和谷歌这个警告,只是不明白的解决方案我的问题是如何摆脱这些警告?

  8. ios – UICollectionView不能使用UISearchController?

    在WWDC2014年的“AInsideInsidePresentationControllers”中,演示者展示了如何在UITableView中设置UISearchController.他们通过设置searchController的searchBar框架,然后将其设置为tableView的tableHeaderView来实现.不幸的是,UICollectionView没有相当于tableHeade

  9. ios7 – 如何使用默认的IOS映像

    嗨,我是IOS开发的新手.我知道如何在IOS应用程序中使用图像.但是我不知道如何使用默认图像,如开发者站点中提到的共享或书签图标.我想用它们我必须下载这些图像集或那些可用在xcode?

  10. ios – 在词典上引用成员’subscript’

    我正在尝试为类创建一个可用的初始化程序.我的类将使用来自网络请求的输入进行初始化.网络不可靠,我想创建一个初始化器,检查所有属性上的存在,否则它将失败.我试图在这里使用守卫,所以请随时指出方法中的任何明显的错误:守卫self.jobId行无法编译,错误:对成员’下标’的模糊引用关于如何纠正这个错误的任何想法?

随机推荐

  1. Swift UITextField,UITextView,UISegmentedControl,UISwitch

    下面我们通过一个demo来简单的实现下这些控件的功能.首先,我们拖将这几个控件拖到storyboard,并关联上相应的属性和动作.如图:关联上属性和动作后,看看实现的代码:

  2. swift UISlider,UIStepper

    我们用两个label来显示slider和stepper的值.再用张图片来显示改变stepper值的效果.首先,这三个控件需要全局变量声明如下然后,我们对所有的控件做个简单的布局:最后,当slider的值改变时,我们用一个label来显示值的变化,同样,用另一个label来显示stepper值的变化,并改变图片的大小:实现效果如下:

  3. preferredFontForTextStyle字体设置之更改

    即:

  4. Swift没有异常处理,遇到功能性错误怎么办?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 字典实战和UIKit初探

    ios中数组和字典的应用Applicationschedule类别子项类别名称优先级数据包contactsentertainment接触UIKit学习用Swift调用CocoaTouchimportUIKitletcolors=[]varbackView=UIView(frame:CGRectMake(0.0,0.0,320.0,CGFloat(colors.count*50)))backView

  6. swift语言IOS8开发战记21 Core Data2

    上一话中我们简单地介绍了一些coredata的基本知识,这一话我们通过编程来实现coredata的使用。还记得我们在coredata中定义的那个Model么,上面这段代码会加载这个Model。定义完方法之后,我们对coredata的准备都已经完成了。最后强调一点,coredata并不是数据库,它只是一个框架,协助我们进行数据库操作,它并不关心我们把数据存到哪里。

  7. swift语言IOS8开发战记22 Core Data3

    上一话我们定义了与coredata有关的变量和方法,做足了准备工作,这一话我们来试试能不能成功。首先打开上一话中生成的Info类,在其中引用头文件的地方添加一个@objc,不然后面会报错,我也不知道为什么。

  8. swift实战小程序1天气预报

    在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。然后在btnpressed方法中依旧增加loadWeather方法.在loadWeather方法中加上信息的显示语句:运行一下看看效果,如图:虽然显示出来了,但是我们的text是可编辑状态的,在storyboard中勾选Editable,再次运行:大功告成,而且现在每次单击按钮,就会重新请求天气情况,大家也来试试吧。

  9. 【iOS学习01】swift ? and !  的学习

    如果不初始化就会报错。

  10. swift语言IOS8开发战记23 Core Data4

    接着我们需要把我们的Rest类变成一个被coredata管理的类,点开Rest类,作如下修改:关键字@NSManaged的作用是与实体中对应的属性通信,BinaryData对应的类型是NSData,CoreData没有布尔属性,只能用0和1来区分。进行如下操作,输入类名:建立好之后因为我们之前写的代码有些地方并不适用于coredata,所以编译器会报错,现在来一一解决。

返回
顶部