您的位置:首页 > 移动开发 > Swift

[swift学习之五]类练习

2016-05-06 14:21 513 查看
//------------------------//
/*注意点:
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)
类的用法远不止这些,今天只是初步写了下,以后遇到什么问题再改~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: