最近项目全面从 ObjectiveC 升级到 Swift,难免得将 LeanCloud 的对象的子类们也得升级。
确实,OC 可以暂时性直接解决问题。可是出去对未来的考虑(程序员的强迫症[威武][威武][威武]),经过反复摸索,总结,终于还是能够实现在 Swift 语言中直接做到对对象的子类化。仅以此文分享经验。
Note:此文 Assume 你对 LeanCloud 的基本使用以及和 Swift 语言基本语法有所了解。第一次发教程,可能不是很清晰 or 准确,但是绝对亲测可用。欢迎指导意见。
废话不多说,直接进入正题。
OC 如何子类话就不重复了,就用文档16里的 Student ,下面是如何用swift写出这个子类。
//==============================================================
// Student is a subclass of AVObject
// Class name: Student
// Author: Xujie Song
// Copyright (c) 2015 SK8 PTY LTD. All rights reserved.
//==============================================================
import Foundation
class Student : AVObject, AVSubclassing {
// ============================================================
// Constructors
// ===========================================================
//必须要有这个Method,无论什么Class
class func parseClassName() -> String? {
return "Student"
}
//这个必须有,private or not无所谓
private override init() {
super.init();
}
//若需要自定义Constructor(or Initializer)
init(studentName: String) {
super.init();
self.name = studentName;
}
// ============================================================
// Instance Property
// ============================================================
//例如,Student这个子类里有一个Property,“name“
//在OC里的@Dynamic,Swift里应该用@NSManaged
//请确保 Key Name 和 @NSManaged var 一致,并且不要漏掉 @NSManaged
@NSManaged var name: String?
//也请确保,其他想要加入的property,不要和Key Name 重叠,比如
//var name: String? 这样会程序会崩溃
// ============================================================
// Property setters and getters
// ============================================================
//Property setter and getter 在Swift中不是必须的,出于和Java的同步性(程序员的强迫症[威武][威武][威武])
func getName() -> String? {
//return self["name"]; 或
return self.objectForKey("name") as? String;
}
func setName(name: String) {
//self["name"] = name; 或
self.setObject(name, forKey: "name");
}
// =======================================================
// Class Method
//=========================================================
class func isSingle() -> Bool {
return false;
}
// ============================================================
// Instance Method
// ============================================================
func isInARelationship() -> Bool {
return true;
}
}
写完这个子类后,确保在 AppDelegate.swift 中,AVOSCloud.setApplicationId 前,加入
Student.registerSubclass();
这样一来,Student 应该就可以正常使用了。
转载请注明出处!
关注我的微博 @好吃懒做的杰克,@SK8科技。
-
创建时间
15年3月30日
-
最后回复
15年8月19日
-
2
回复
-
3.1K
浏览
-
3
用户
-
6
赞
-
3
链接