update Models for RealmSwift

This commit is contained in:
nixzhu
2015-05-11 12:10:28 +08:00
parent 662082a8cd
commit 51cd553c2b
5 changed files with 61 additions and 138 deletions
+1 -1
View File
@@ -5,4 +5,4 @@ use_frameworks!
pod 'pop'
pod 'AFNetworking'
pod 'MZFayeClient', :path => '../CatchLib-iOS/MZFayeClient/'
pod 'Realm'
pod 'RealmSwift'
+8 -5
View File
@@ -25,16 +25,18 @@ PODS:
- Base64 (~> 1.0.1)
- SocketRocket (~> 0.3.1-beta2)
- pop (1.0.7)
- Realm (0.91.5):
- Realm/Headers (= 0.91.5)
- Realm/Headers (0.91.5)
- Realm (0.92.1):
- Realm/Headers (= 0.92.1)
- Realm/Headers (0.92.1)
- RealmSwift (0.92.1):
- Realm (= 0.92.1)
- SocketRocket (0.3.1-beta2)
DEPENDENCIES:
- AFNetworking
- MZFayeClient (from `../CatchLib-iOS/MZFayeClient/`)
- pop
- Realm
- RealmSwift
EXTERNAL SOURCES:
MZFayeClient:
@@ -45,7 +47,8 @@ SPEC CHECKSUMS:
Base64: 4924bf3ca6fa559a5161ef717291bd450eb7bd1a
MZFayeClient: 19df756a4c86c8f414668e6edc54fccfee54adbb
pop: 628ffc631644601567ee8bfaaaea493ebd7d0923
Realm: 670059efdb212ab939c1745a60aff27820c0a9c4
Realm: 10c91667c5c65d6fe56b206c2c31e9b5eafb8718
RealmSwift: edc7963f64c50852992751ba274ee506a0d104b2
SocketRocket: 7284ab9370a06c99aba92b2fe3a32aedd0f9a6fa
COCOAPODS: 0.37.0
-4
View File
@@ -150,7 +150,6 @@
50CDBE4A1ACBAD3200459CE0 /* ChatLeftImageCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 50CDBE481ACBAD3200459CE0 /* ChatLeftImageCell.xib */; };
50D4D0DB1AFA825B005AEB6F /* MediaControlView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50D4D0DA1AFA825B005AEB6F /* MediaControlView.swift */; };
50E114F41ABBF9CC00F13000 /* Models.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50E114F31ABBF9CC00F13000 /* Models.swift */; };
50E114F71ABBFA7000F13000 /* RLMSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50E114F61ABBFA7000F13000 /* RLMSupport.swift */; };
50E114F91ABC137A00F13000 /* YepServiceSync.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50E114F81ABC137A00F13000 /* YepServiceSync.swift */; };
50E114FC1ABC549300F13000 /* ContactsCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50E114FA1ABC549300F13000 /* ContactsCell.swift */; };
50E114FD1ABC549300F13000 /* ContactsCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 50E114FB1ABC549300F13000 /* ContactsCell.xib */; };
@@ -326,7 +325,6 @@
50CDBE481ACBAD3200459CE0 /* ChatLeftImageCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = ChatLeftImageCell.xib; path = Views/Cells/ChatLeftImage/ChatLeftImageCell.xib; sourceTree = "<group>"; };
50D4D0DA1AFA825B005AEB6F /* MediaControlView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MediaControlView.swift; path = Views/Media/MediaControlView.swift; sourceTree = "<group>"; };
50E114F31ABBF9CC00F13000 /* Models.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Models.swift; path = Realm/Models.swift; sourceTree = "<group>"; };
50E114F61ABBFA7000F13000 /* RLMSupport.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RLMSupport.swift; path = Realm/RLMSupport.swift; sourceTree = "<group>"; };
50E114F81ABC137A00F13000 /* YepServiceSync.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = YepServiceSync.swift; path = Services/YepServiceSync.swift; sourceTree = "<group>"; };
50E114FA1ABC549300F13000 /* ContactsCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ContactsCell.swift; path = Views/Cells/Contacts/ContactsCell.swift; sourceTree = "<group>"; };
50E114FB1ABC549300F13000 /* ContactsCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = ContactsCell.xib; path = Views/Cells/Contacts/ContactsCell.xib; sourceTree = "<group>"; };
@@ -1064,7 +1062,6 @@
50E114F51ABBF9D100F13000 /* Realm */ = {
isa = PBXGroup;
children = (
50E114F61ABBFA7000F13000 /* RLMSupport.swift */,
50E114F31ABBF9CC00F13000 /* Models.swift */,
);
name = Realm;
@@ -1410,7 +1407,6 @@
508D17401ACCD2740092D666 /* YepButton.swift in Sources */,
506BB7F51AE4E0A500C1A2A0 /* SkillAnnotationHeader.swift in Sources */,
5023DE301AB6861500B3EE96 /* ProfileViewController.swift in Sources */,
50E114F71ABBFA7000F13000 /* RLMSupport.swift in Sources */,
5023DE261AB6856300B3EE96 /* ConversationsViewController.swift in Sources */,
50A9D4511ACD383E000B2599 /* NSDate+Extension.swift in Sources */,
506EC20A1AC95BFC00CE42B3 /* UIFont+Yep.swift in Sources */,
+52 -50
View File
@@ -6,7 +6,7 @@
// Copyright (c) 2015 Catch Inc. All rights reserved.
//
import Realm
import RealmSwift
// 使 Realm
@@ -24,27 +24,27 @@ enum UserFriendState: Int {
case Me = 4 //
}
class Avatar: RLMObject {
class Avatar: Object {
dynamic var avatarURLString: String = ""
dynamic var avatarFileName: String = ""
var user: User? {
let users = linkingObjectsOfClass("User", forProperty: "avatar") as! [User]
let users = linkingObjects(User.self, forProperty: "avatar")
return users.first
}
}
class UserSkillCategory: RLMObject {
class UserSkillCategory: Object {
dynamic var skillCategoryID: String = ""
dynamic var name: String = ""
dynamic var localName: String = ""
var skills: [UserSkill] {
return linkingObjectsOfClass("UserSkill", forProperty: "category") as! [UserSkill]
return linkingObjects(UserSkill.self, forProperty: "category")
}
}
class UserSkill: RLMObject {
class UserSkill: Object {
dynamic var category: UserSkillCategory?
@@ -54,15 +54,15 @@ class UserSkill: RLMObject {
dynamic var coverURLString: String = ""
var learningUsers: [User] {
return linkingObjectsOfClass("User", forProperty: "learningSkills") as! [User]
return linkingObjects(User.self, forProperty: "learningSkills")
}
var masterUsers: [User] {
return linkingObjectsOfClass("User", forProperty: "masterSkills") as! [User]
return linkingObjects(User.self, forProperty: "masterSkills")
}
}
class User: RLMObject {
class User: Object {
dynamic var userID: String = ""
dynamic var nickname: String = ""
dynamic var introduction: String = ""
@@ -80,47 +80,47 @@ class User: RLMObject {
dynamic var longitude: Double = 0
dynamic var latitude: Double = 0
dynamic var learningSkills = RLMArray(objectClassName: UserSkill.className())
dynamic var masterSkills = RLMArray(objectClassName: UserSkill.className())
dynamic var learningSkills = List<UserSkill>()
dynamic var masterSkills = List<UserSkill>()
var messages: [Message] {
return linkingObjectsOfClass("Message", forProperty: "fromFriend") as! [Message]
return linkingObjects(Message.self, forProperty: "fromFriend")
}
var conversation: Conversation? {
let conversations = linkingObjectsOfClass("Conversation", forProperty: "withFriend") as! [Conversation]
let conversations = linkingObjects(Conversation.self, forProperty: "withFriend")
return conversations.first
}
var ownedGroups: [Group] {
return linkingObjectsOfClass("Group", forProperty: "owner") as! [Group]
return linkingObjects(Group.self, forProperty: "owner")
}
var belongsToGroups: [Group] {
return linkingObjectsOfClass("Group", forProperty: "members") as! [Group]
return linkingObjects(Group.self, forProperty: "members")
}
}
// MARK: Group
class Group: RLMObject {
class Group: Object {
dynamic var groupID: String = ""
dynamic var groupName: String = ""
dynamic var createdAt: NSDate = NSDate()
dynamic var owner: User?
dynamic var members = RLMArray(objectClassName: User.className())
dynamic var members = List<User>()
var conversation: Conversation? {
let conversations = linkingObjectsOfClass("Conversation", forProperty: "withGroup") as! [Conversation]
let conversations = linkingObjects(Conversation.self, forProperty: "withGroup")
return conversations.first
}
}
// MARK: Message
class Coordinate: RLMObject {
class Coordinate: Object {
dynamic var latitude: Double = 0
dynamic var longitude: Double = 0
}
@@ -181,7 +181,7 @@ enum MessageSendState: Int {
case Successed = 2
}
class Message: RLMObject {
class Message: Object {
dynamic var messageID: String = ""
dynamic var createdAt: NSDate = NSDate()
@@ -211,7 +211,7 @@ enum ConversationType: Int {
case Group = 1 //
}
class Conversation: RLMObject {
class Conversation: Object {
dynamic var type: Int = ConversationType.OneToOne.rawValue
dynamic var updatedAt: NSDate = NSDate()
@@ -219,7 +219,7 @@ class Conversation: RLMObject {
dynamic var withGroup: Group?
var messages: [Message] {
return linkingObjectsOfClass("Message", forProperty: "conversation") as! [Message]
return linkingObjects(Message.self, forProperty: "conversation")
}
}
@@ -227,34 +227,40 @@ class Conversation: RLMObject {
// MARK: Helpers
func normalUsers() -> RLMResults {
func normalUsers() -> Results<User> {
let realm = Realm()
let predicate = NSPredicate(format: "friendState = %d", UserFriendState.Normal.rawValue)
return User.objectsWithPredicate(predicate)
return realm.objects(User).filter(predicate)
}
func userSkillWithSkillID(skillID: String) -> UserSkill? {
let realm = Realm()
let predicate = NSPredicate(format: "skillID = %@", skillID)
return UserSkill.objectsWithPredicate(predicate).firstObject() as? UserSkill
return realm.objects(UserSkill).filter(predicate).first
}
func userSkillCategoryWithSkillCategoryID(skillCategoryID: String) -> UserSkillCategory? {
let realm = Realm()
let predicate = NSPredicate(format: "skillCategoryID = %@", skillCategoryID)
return UserSkillCategory.objectsWithPredicate(predicate).firstObject() as? UserSkillCategory
return realm.objects(UserSkillCategory).filter(predicate).first
}
func userWithUserID(userID: String) -> User? {
let realm = Realm()
let predicate = NSPredicate(format: "userID = %@", userID)
return User.objectsWithPredicate(predicate).firstObject() as? User
return realm.objects(User).filter(predicate).first
}
func groupWithGroupID(groupID: String) -> Group? {
let realm = Realm()
let predicate = NSPredicate(format: "groupID = %@", groupID)
return Group.objectsWithPredicate(predicate).firstObject() as? Group
return realm.objects(Group).filter(predicate).first
}
func avatarWithAvatarURLString(avatarURLString: String) -> Avatar? {
let realm = Realm()
let predicate = NSPredicate(format: "avatarURLString = %@", avatarURLString)
return Avatar.objectsWithPredicate(predicate).firstObject() as? Avatar
return realm.objects(Avatar).filter(predicate).first
}
func tryGetOrCreateMe() -> User? {
@@ -263,9 +269,9 @@ func tryGetOrCreateMe() -> User? {
return me
} else {
let realm = RLMRealm.defaultRealm()
let realm = Realm()
realm.beginWriteTransaction()
realm.beginWrite()
let me = User()
@@ -280,9 +286,9 @@ func tryGetOrCreateMe() -> User? {
me.avatarURLString = avatarURLString
}
realm.addObject(me)
realm.add(me)
realm.commitWriteTransaction()
realm.commitWrite()
return me
}
@@ -291,26 +297,26 @@ func tryGetOrCreateMe() -> User? {
return nil
}
func messagesInConversation(conversation: Conversation) -> RLMResults {
func messagesInConversation(conversation: Conversation) -> Results<Message> {
let realm = Realm()
let predicate = NSPredicate(format: "conversation = %@", conversation)
let messages = Message.objectsWithPredicate(predicate).sortedResultsUsingProperty("createdAt", ascending: true)
let messages = realm.objects(Message).sorted("createdAtc", ascending: true)
return messages
}
func tryCreateSectionDateMessageInConversation(conversation: Conversation, beforeMessage message: Message, success: (Message) -> Void) {
let messages = messagesInConversation(conversation)
if messages.count > 1 {
if let prevMessage = messages.objectAtIndex(messages.count - 2) as? Message {
if message.createdAt.timeIntervalSinceDate(prevMessage.createdAt) > 30 { // TODO: Time Section
let prevMessage = messages[messages.count - 2]
if message.createdAt.timeIntervalSinceDate(prevMessage.createdAt) > 30 { // TODO: Time Section
// insert a new SectionDate Message
let newSectionDateMessage = Message()
newSectionDateMessage.conversation = conversation
newSectionDateMessage.mediaType = MessageMediaType.SectionDate.rawValue
newSectionDateMessage.createdAt = message.createdAt.dateByAddingTimeInterval(-1) //
// insert a new SectionDate Message
let newSectionDateMessage = Message()
newSectionDateMessage.conversation = conversation
newSectionDateMessage.mediaType = MessageMediaType.SectionDate.rawValue
newSectionDateMessage.createdAt = message.createdAt.dateByAddingTimeInterval(-1) //
success(newSectionDateMessage)
}
success(newSectionDateMessage)
}
}
}
@@ -333,18 +339,14 @@ func nameOfConversation(conversation: Conversation) -> String? {
func lastChatDateOfConversation(conversation: Conversation) -> NSDate? {
let messages = messagesInConversation(conversation)
if let lastMessage = messages.lastObject() as? Message {
return lastMessage.createdAt
}
return nil
return messages.last?.createdAt
}
func lastSignDateOfConversation(conversation: Conversation) -> NSDate? {
let messages = messagesInConversation(conversation)
if let
lastMessage = messages.lastObject() as? Message,
lastMessage = messages.last,
user = lastMessage.fromFriend {
return user.lastSignInAt
}
-78
View File
@@ -1,78 +0,0 @@
////////////////////////////////////////////////////////////////////////////
//
// Copyright 2014 Realm Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
////////////////////////////////////////////////////////////////////////////
import Realm
extension RLMObject {
// Swift query convenience functions
public class func objectsWhere(predicateFormat: String, _ args: CVarArgType...) -> RLMResults {
return objectsWithPredicate(NSPredicate(format: predicateFormat, arguments: getVaList(args)))
}
public class func objectsInRealm(realm: RLMRealm, _ predicateFormat: String, _ args: CVarArgType...) -> RLMResults {
return objectsInRealm(realm, withPredicate:NSPredicate(format: predicateFormat, arguments: getVaList(args)))
}
}
extension RLMArray: SequenceType {
// Support Sequence-style enumeration
public func generate() -> GeneratorOf<RLMObject> {
var i: UInt = 0
return GeneratorOf<RLMObject> {
if (i >= self.count) {
return .None
} else {
return self[i++] as? RLMObject
}
}
}
// Swift query convenience functions
public func indexOfObjectWhere(predicateFormat: String, _ args: CVarArgType...) -> UInt {
return indexOfObjectWithPredicate(NSPredicate(format: predicateFormat, arguments: getVaList(args)))
}
public func objectsWhere(predicateFormat: String, _ args: CVarArgType...) -> RLMResults {
return objectsWithPredicate(NSPredicate(format: predicateFormat, arguments: getVaList(args)))
}
}
extension RLMResults: SequenceType {
// Support Sequence-style enumeration
public func generate() -> GeneratorOf<RLMObject> {
var i: UInt = 0
return GeneratorOf<RLMObject> {
if (i >= self.count) {
return .None
} else {
return self[i++] as? RLMObject
}
}
}
// Swift query convenience functions
public func indexOfObjectWhere(predicateFormat: String, _ args: CVarArgType...) -> UInt {
return indexOfObjectWithPredicate(NSPredicate(format: predicateFormat, arguments: getVaList(args)))
}
public func objectsWhere(predicateFormat: String, _ args: CVarArgType...) -> RLMResults {
return objectsWithPredicate(NSPredicate(format: predicateFormat, arguments: getVaList(args)))
}
}