mirror of
https://github.com/wahyd4/Yep.git
synced 2026-08-17 08:46:17 +10:00
update Models for RealmSwift
This commit is contained in:
@@ -5,4 +5,4 @@ use_frameworks!
|
||||
pod 'pop'
|
||||
pod 'AFNetworking'
|
||||
pod 'MZFayeClient', :path => '../CatchLib-iOS/MZFayeClient/'
|
||||
pod 'Realm'
|
||||
pod 'RealmSwift'
|
||||
|
||||
+8
-5
@@ -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
|
||||
|
||||
@@ -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
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)))
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user