エラー内容
SwiftでRealmのデータをソートしたいところなのですが、
Expression is not assignable: function call returns immutable value
と出てしまいます。
まず最初に
tweets.replyTweet = tweets.replyTweet.sorted(by: { $0.replyTimeStamp > $1.replyTimeStamp })
とするとCannot assign value of type '[ReplyTweet]' to type 'List<ReplyTweet>'
と出たので以下のようにList型をArrayに変えてみたり、いろいろ試してみました。
Array(tweets.replyTweet) = tweets.replyTweet.sorted(by: { $0.replyTimeStamp > $1.replyTimeStamp }) // Result of call to 'sorted(by:)' is unused tweets.replyTweet.sorted(by: { $0.replyTimeStamp > $1.replyTimeStamp }) let reply = tweets.replyTweet.sorted(by: { $0.replyTimeStamp > $1.replyTimeStamp }) // Expression is not assignable: function call returns immutable value Array(tweets.replyTweet) = reply // Cannot assign value of type '[ReplyTweet]' to type 'List<ReplyTweet>' tweets.replyTweet = reply
Expression is not assignable: function call returns immutable value
と出てきてしまい、エラーが出てきてしまいます。これはどういうことなのでしょうか?
__replyTweet__はList型で、配列にしろとなったので配列にしたら上記のエラーになってしまいました。
また、別のクラスでTweetクラスを配列にした次の例は実行でき、ソートもできました。
private var tweets: [Tweet] = [Tweet]() self.tweets = tweets.sorted(by: { $0.timestamp > $1.timestamp })
同じ配列なのに、どのような違いが生じるのか理解できません。
どうか理解できる方にどう書き換えたらいいのかご教授してくださると助かります。
コード
class Tweet: Object { @objc dynamic var tweetId: Int = 0 @objc dynamic var caption: String = "" @objc dynamic var timestamp: Date = Date() let users = LinkingObjects(fromType: User.self, property: "tweets") var replyTweet = List<ReplyTweet>() override static func primaryKey() -> String? { return "tweetId" } } class ReplyTweet: Object { @objc dynamic var replyTweetId: Int = 0 @objc dynamic var replyCaption: String = "" @objc dynamic var replyTimeStamp: Date = Date() let replyTweets = LinkingObjects(fromType: Tweet.self, property: "replyTweet") override static func primaryKey() -> String? { return "replyTweetId" } } private var tweets: Tweet func handleRetweetTapped(_ cell: TweetCell) { let indexPath = collectionView.indexPath(for: cell) let tweetIndex = tweets.replyTweet[indexPath!.row] let formatter: DateFormatter = DateFormatter() formatter.dateFormat = "yyyy/MM/dd ・h:mm a " let formatString = formatter.string(from: Date()) try! realm.write { tweetIndex.replyTimeStamp = formatter.date(from: formatString)! } // tweets.replyTweet = tweets.replyTweet.sorted(by: { $0.replyTimeStamp > $1.replyTimeStamp }) Array(tweets.replyTweet) = tweets.replyTweet.sorted(by: { $0.replyTimeStamp > $1.replyTimeStamp }) // Expression is not assignable: function call returns immutable value collectionView.reloadData() }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。