

タイトル通り、indexPath.rowを使いたいのですが、使いたいプロパティが.selfとなってしまい、使えません。

[code]

    private var tweets = Results<Tweet>?.self {
            didSet { collectionView.reloadData() }
    }
    
[/code]

保存してあるだけ表示したいのですが、メタタイプとなってどうしてもできませんできた。

[code]

    override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
            let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath) as! TweetCell
    //        let tweetObject = Tweet(value: type(of: tweets[indexPath.row]))
    //        let tweetObject = tweets.map(indexPath.row)
            let tweetObject = type(of: tweets)[indexPath.row]
            cell.tweets = tweetObject
            return cell
    }
    
[/code]

Value of type 'Results?.Type.Type' has no subscripts  
とエラーが出て使えないです。  
どうしたらindexPath.rowを使えるようになるでしょうか？  
Realmに詳しい方、ご教授お願いします。


CC BY-SA 4.0
2020-07-12T02:56:30.660
68507
2020-07-25T10:10:00.003
41058
question
swift realm
realm swiftでindexPath.rowを使いたい


おそらく`var tweets =
...`と書いてしまったことで、型を変数に代入している、というあまり一般的でないコードになってしまったために、コンパイラの自動修正がうまく働かなくてコンパイラの言うとおりにコンパイルエラーだけを修正するようにしていった結果、メタタイプを使うようなコードになってしまったのだと思います。

おそらくやりたかったことは、下記のように`var tweets:
Results<Tweet>?`と、代入ではなく「コロン」を使って型アノテーションとして変数を定義することだと思います。

[code]

    private var tweets: Results<Tweet>? {
        didSet { collectionView.reloadData() }
    }
    
[/code]

このように書くと`tweets`変数は`Results<Tweet>?`型の変数として定義できます。

`Results`は配列と同じように扱えるように配列のプロトコルに準拠していますので、`indexPath.row`を用いて指定した場所の値を取り出すのは素直に

[code]

    let tweetObject = tweets?[indexPath.row]
    
[/code]

のように書けばいいです。


CC BY-SA 4.0
2020-07-25T09:29:29.103
68949
2020-07-25T10:10:00.003
2020-07-25T10:10:00.003
19110
5519
68507
answer