hank
2019-01-22 ab662912a378edb0878538b40a531434dbbe6792
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
/*
 * Copyright (C) 2017 Twitter, 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 <Foundation/Foundation.h>
#import <TwitterKit/TWTRJSONConvertible.h>
 
@class TWTRTweet;
@class TWTRUser;
 
NS_ASSUME_NONNULL_BEGIN
 
/**
 *  `TWTRTweet` is an immutable representation of a Tweet.
 */
@interface TWTRTweet : NSObject <NSCoding, TWTRJSONConvertible>
 
#pragma mark - Properties
 
/**
 *  The ID of the Twitter Tweet.
 *  @warning This represents the id_str field, which could differ from the value of the id field.
 */
@property (nonatomic, copy, readonly) NSString *tweetID;
 
/**
 *  The date when this Tweet was created.
 */
@property (nonatomic, copy, readonly) NSDate *createdAt;
 
/**
 *  The text of the Tweet.
 */
@property (nonatomic, copy, readonly) NSString *text;
 
/**
 *  The Author of the Tweet.
 */
@property (nonatomic, readonly) TWTRUser *author;
 
/**
 *  ID of the authenticated Twitter user this Tweet was loaded for. Some Tweet properties e.g. `isLiked`
 *  can vary depending on the authenticated user. Nil means the Tweet was loaded from the perspective
 *  of a logged-out user or the authenticated user could not be determined.
 */
@property (nonatomic, readonly, nullable) NSString *perspectivalUserID;
 
/**
 *  The number of times this Tweet was liked.
 */
@property (nonatomic, readonly) long long likeCount;
 
/**
 *  The number of times this Tweet was retweeted.
 */
@property (nonatomic, readonly) long long retweetCount;
 
/**
 *  The language of the Tweet.
 */
@property (nonatomic, copy, readonly) NSString *languageCode;
 
/**
 *  The Tweet this Tweet was a reply to.
 */
@property (nonatomic, copy, readonly, nullable) NSString *inReplyToTweetID;
 
/**
 *  The User ID this Tweet was a reply to.
 */
@property (nonatomic, copy, readonly, nullable) NSString *inReplyToUserID;
 
/**
 *  The screen name of the user this Tweet was a reply to.
 *  @note This doesn't contain the `@` sign before the screen name.
 */
@property (nonatomic, copy, readonly, nullable) NSString *inReplyToScreenName;
 
/**
 *  The permalink URL for this Tweet.
 *
 *  Suitable for loading in a `UIWebView`, `WKWebView` or passing to Safari:
 *
 *  `[[UIApplication sharedApplication] openURL:tweet.permalink];`
 */
@property (nonatomic, copy, readonly) NSURL *permalink;
 
/**
 *  Whether this Tweet was liked by the authenticated user.
 *
 *  @warning The value of this property depends on the authenticated user.
 */
@property (nonatomic, readonly) BOOL isLiked;
 
/**
 *  Whether this Tweet was retweeted by the authenticated user.
 *
 *  @warning The value of this property depends on the authenticated user.
 */
@property (nonatomic, readonly) BOOL isRetweeted;
 
/**
 *  The Tweet ID of the authenticated user's retweet of this Tweet. This will be `nil` if there is no
 *  authenticated user or the user has not retweeted this Tweet.
 *
 *  @warning The value of this property depends on the authenticated user.
 */
@property (nonatomic, copy, readonly, nullable) NSString *retweetID;
 
/**
 *  The original, fully-hydrated Tweet that was retweeted. This corresponds to the `retweeted_status` API field.
 *  This is `nil` unless `self.isRetweet == YES`.
 */
@property (nonatomic, readonly, nullable) TWTRTweet *retweetedTweet;
 
/**
 *  Indicates whether this Tweet is a retweet of another Tweet.
 */
@property (nonatomic, readonly) BOOL isRetweet;
 
/**
 * Indicates whether this Tweet is a Quote Tweet.
 */
@property (nonatomic, readonly) BOOL isQuoteTweet;
 
/**
 *  The original, fully-hydrated Tweet that was quoted.
 *  This is `nil` unless `self.isRetweet == YES`.
 */
@property (nonatomic, readonly, nullable) TWTRTweet *quotedTweet;
 
/**
 *  Creates an array of TWTRTweet instances from the array of Twitter API JSON response.
 *
 *  @param array A parsed array of Tweet API JSON responses.
 *  @return An array of TWTRTweet instances.
 */
+ (NSArray *)tweetsWithJSONArray:(nullable NSArray *)array;
 
/**
 *  Creates a new Tweet instance with a new value for the `isLiked` boolean
 *  value which is the opposite of the current value.
 */
- (TWTRTweet *)tweetWithLikeToggled;
 
/**
 *  Tweet objects should be hyrdrated from a valid JSON object. See TWTRJSONConvertible for more information.
 */
- (instancetype)init NS_UNAVAILABLE;
 
@end
 
NS_ASSUME_NONNULL_END