[swift学习之五]类练习

//------------------------//
/*注意点:
 1:静态函数不能继承
 2:协议不和oc不一样了,虽然有optional和required关键字,但都不好使了~
 3:oc协议里面的静态函数(+)能够覆盖override,swift不可以,提示为最终函数。还是swift好些,比较严谨。
 4:convenience构造函数中,不能用self+.的形式把init打出来,还以为不支持呢,结果直接写也没问题。但self不能省略。
 5:convenience函数不能覆盖override
 6:类里面改成员变量的函数,不用mutating修饰,结构和枚举需要。但编译器有提示,非常方便~。
 7:如果子类也声明了和父类一样的函数,编译器非得让加override,oc不加也覆盖。这点和delphi可不一样。

 @protocol ClassProtocol <NSObject>
 @required
   +(NSString*)ClassDescription;
   -(NSString*)Description;
 @end
 /*不用声明,直接实现都行~*/
 @interface ClassTestBase : NSObject<ClassProtocol>
   +(NSString*)ClassDescription;
 @end

 @interface ClassTestChild : ClassTestBase

 @end

 @implementation ClassTestBase
 +(NSString*)ClassDescription{
   return @"这是个class基类的静态函数";
 }
 -(NSString*)Description{
   return @"这是个class基类的成员函数";
 }
 @end

 @implementation ClassTestChild

 -(NSString*)Description{
   return @"这是个class子类的成员函数";
 }
 +(NSString*)ClassDescription{
   return @"这是个class子类的静态函数";
 }
 @end

 @implementation ViewController
 - (void)viewDidLoad {
   [super viewDidLoad];
   ClassTestBase* c = [[ClassTestChild alloc] init];
   NSLog(@"%@:%@",c.Description,[ClassTestChild ClassDescription]);
 }
*/
protocol ClassProtocol {
    static func ClassDescription()->String
    func Description() -> String
}
class ClassTestBase:ClassProtocol{
    static func ClassDescription() -> String {
        return "这是个class基类的静态函数"
    }
    var TrueName:String=""
    var ID:Int = 0;
    private init(ATrueName: String,AID:Int){
    self.TrueName = ATrueName
        self.ID = AID;
    }
    convenience init(ATrueName: String){
        self.init(ATrueName: ATrueName, AID: -1)
    }
    func Description() -> String {
        return "这是个class基类的成员函数"
    }
    func AddMyID() -> Void {
        ID += 1
    }

}
class ClassTestChild: ClassTestBase {
    override func Description() -> String {
        return "这是个class子类的成员函数"
    }
    override init(ATrueName: String, AID: Int) {
        super.init(ATrueName: ATrueName, AID: AID)
        super.ID = AID + 5;
    }
    convenience init(ATrueName: String) {
        self.init(ATrueName: ATrueName, AID: -2)
    }
    override func AddMyID() -> Void {
        super.AddMyID()
        ID+=1
    }

}
let obj:ClassTestBase = ClassTestChild(ATrueName:"Hello")
obj.AddMyID()
print(obj.ID)

类的用法远不止这些,今天只是初步写了下,以后遇到什么问题再改~

时间: 2024-11-07 10:46:37

[swift学习之五]类练习的相关文章

Swift学习笔记:类和结构

一.类和结构的异同 类和结构有一些相似的地方,它们都可以: 1. 定义一些可以赋值的属性: 2. 定义具有功能性的方法 3. 定义下标,使用下标语法 4. 定义初始化方法来设置初始状态 5. 在原实现方法上的可扩展性 根据协议提供某一特定类别的基本功能 1. 类还有一些结构不具备的特性: 2. 类的继承性 3. 对类实例实时的类型转换 4. 析构一个类的实例使之释放空间 5. 引用计数,一个类实例可以有多个引用 1. 定义语法 struct Name{ let firstName = "&quo

Swift学习——类的定义,使用,继承,构造等(五)

Swift学习--类的定义,使用.继承,构造等(五) 类的使用说明 1 使用class和类名来创建一个类名,比如: class student 2 类中属性的声明和常量和变量一样,唯一的差别就是他们的上下文是类 3 方法和函数声明也一样 // 1 ---- 简单的类介绍 class Student{ //变量学号初始化为0 var num = 0; //成员函数 func GetNum()->Int{ return num } } //创建类的实例对象 var student = Student

Swift学习——A Swift Tour 对象和类

Objects and Classes  对象和类 使用关键字 class 定义一个类,在定义类的属性的时候与常量或者变量的定义相同(继承父类的属性定义不同),方法和函数的定义也相同 class Shape { var numberOfSides = 0 func simpleDescription() -> String { return "A shape with \(numberOfSides) sides." } } 使用 ()来声明类的实例,使用点 . 语法来获取类的属

Swift学习笔记(11)--类与结构体

类与结构是编程人员在代码中会经常用到的代码块.在类与结构中可以像定义常量,变量和函数一样,定义相关的属性和方法以此来实现各种功能. 和其它的编程语言不太相同的是,Swift不需要单独创建接口或者实现文件来使用类或者结构.Swift中的类或者结构可以在单文件中直接定义,一旦定义完成后,就能够被直接其它代码使用. 注意:一个类的实例一般被视作一个对象,但是在Swift中,类与结构更像是一个函数方法,在后续的章节中更多地是讲述类和结构的功能性. 1.类和结构的异同 类和结构有一些相似的地方,它们都可以

初探swift语言的学习笔记(类对象,函数)

swift扩展了很多功能和属性,有些也比较奇P.只有慢慢学习,通过经验慢慢总结了. 下面将初步学习一下类的写法. 码工,最大爱好就是看码,而不是文字,太枯燥. // // computer.swift // swiftDemo // // Created by apple on 14-6-8. // Copyright (c) 2014年 fengsh. All rights reserved. /* 写本例子的目的在于快速学习swift类的写法,包括知识点: 1.属性设置 2.构造.释构 3.

Swift学习】Swift编程之旅---类和结构体(十三)

与其他编程语言所不同的是,Swift 并不要求你为自定义类和结构去创建独立的接口和实现文件.你所要做的是在一个单一文件中定义一个类或者结构体,系统将会自动生成面向其它代码的外部接口. 注意:通常一个类的实例被称为对象.然而在Swift 中,类和结构体的关系要比在其他语言中更加的密切,本章中所讨论的大部分功能都可以用在类和结构体上.因此,我们会主要使用实例而不是对象. 比较类和结构体 类和结构体都具有以下特性: 定义用于存储值的属性 定义提供特定能力或功能的方法 定义提供使用下标语法访问值的下标

Swift语法学习之 类和结构体

类和结构体 本页包含内容: 类和结构体对比 结构体和枚举是值类型 类是引用类型 类和结构体的选择 集合(collection)类型的赋值与复制行为 与其他编程语言所不同的是,Swift 并不要求你为自定义类和结构去创建独立的接口和实现文件.你所要做的是在一个单一文件中定义一个类或者结构体,系统将会自动生成面向其它代码的外部接口. 注意: 通常一个类的实例被称为对象.然而在Swift 中,类和结构体的关系要比在其他语言中更加的密切,本章中所讨论的大部分功能都可以用在类和结构体上.因此,我们会主要使

Java并发学习之五——线程的睡眠和恢复

本文是学习网络上的文章时的总结,感谢大家无私的分享. 1.Thread类的sleep方法,可以使线程睡眠.此方法接收一个整数作为参数,表示线程暂停运行的毫秒数.在调用sleep方法后,当时间结束时,JVM会安排他们CPU时间,线程会继续按指令执行. 另一种可能是使用一个有TimeUnit列举元素的sleep方法,使用线程类的sleep方法让当前线程睡眠,但是它接收的参数单位后会转成毫秒的. 2.当你调用sleep()方法,Thread离开CPU并在一段时间内停止运行.在这段时间内,他是不消耗CP

swift学习笔记(三)关于拷贝和引用

在swift提供的基本数据类型中,包括Int ,Float,Double,String,Enumeration,Structure,Dictionary都属于值拷贝类型. 闭包和函数同属引用类型 捕获则为拷贝.捕获即定义这些常量和变量的原作用域已不存在,闭包仍然可以在闭包函数体内引用和修改这些值 class属于引用类型. Array的情况稍微复杂一些,下面主要对集合类型进行分析: 一.关于Dictionary:无论何时将一个字典实例赋给一个常量,或者传递给一个函数方法时,在赋值或调用发生时,都会