type '[string]の値を変換できませんか?'予定されている引数タイプ '文字列に? SWIFTの構造体から画像を表示するとき -- swift フィールド と firebase フィールド と firebase-realtime-database フィールド 関連 問題

Cannot convert value of type '[String]?' to expected argument type 'String?' when displaying images from a struct in swift












1
vote

問題

日本語

クリックすると(YouTubeのサムネイルのように)Swiftでアプリを開発しています(YouTubeのサムネイル)をクリックしました。これをクリックすると、ステップバイステップの複数のイメージである「サブポスト」を持つビューコントローラに送信します。 (画像を使用)サムネイル機能を終了しましたサムネイルをクリックすると、「サブポスト」ビューに送信します。これで、 collectionview にすべての 'subposts'を追加する必要があります。 Uploadにサブポストを保存する方法のために、 struct を使用しているため、 struct を使用しているため、 class SUBPOSTを使用しているようです。混乱している可能性があります。明確でなければ、私に知らせてください、そして私はさらに説明します。これが私が思い付くことです:

<事前> <コード> struct SubPost: Decodable { var pathToImage: [String]? var postID: String! var userID: String! init(pathToImage: [String]? = nil, postID: String? = nil, userID: String? = nil) { self.pathToImage = pathToImage self.postID = postID self.userID = userID } } <事前> <コード> func fetchSubPosts() { ref.child("subposts").queryOrderedByKey().observeSingleEvent(of: .value, with: { (snapshot) in let subpostsSnap = snapshot.value as! [String : AnyObject] for (_,subpost) in subpostsSnap { if let postID = subpost["postID"] as? String { var subposst = SubPost(pathToImage: subpost["pathToImage"] as? [String]) if let userID = subpost["userID"] as? String { subposst.postID = postID subposst.userID = userID } self.subposts.append(subposst) } self.collectionview.reloadData() } }) ref.removeAllObservers() }

これは<コード> collectionView 関数です。

<事前> <コード> func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "subPostCell", for: indexPath) as! SubPostCell cell.subPostImage.downloadImage(from: self.subposts[indexPath.row].pathToImage) return cell } }

行にエラーがあります。

<コード> cell.subPostImage.downloadImage(from: self.subposts[indexPath.row].pathToImage)

の誤差で

type '[string]の値を変換できませんか?'予定された引数タイプ '文字列?'

これを理解できないようです。あらゆる種類の助けがとても感謝しています! 事前にありがとう!

英語

I'm developing an app in swift that displays images (just like YouTube thumbnails), which once clicked, sends you to a view controller with 'subposts' which are multiple images that explain step-by-step how to accomplish something (using images). I have finished the thumbnail functionality where once you click the thumbnail, it sends you to the 'subposts' view. Now I have to add all of the 'subposts' to a collectionview. I can't seem to figure that out, since i'm using a struct instead of a class SubPost because of how I save the subposts on upload. Might be confusing. If not clear, please let me know, and I will further explain. This is what i've come up with:

struct SubPost: Decodable {     var pathToImage: [String]?     var postID: String!     var userID: String!      init(pathToImage: [String]? = nil, postID: String? = nil, userID: String? = nil) {         self.pathToImage = pathToImage         self.postID = postID         self.userID = userID     }  } 
func fetchSubPosts() {     ref.child("subposts").queryOrderedByKey().observeSingleEvent(of: .value, with: { (snapshot) in         let subpostsSnap = snapshot.value as! [String : AnyObject]         for (_,subpost) in subpostsSnap {             if let postID = subpost["postID"] as? String {                 var subposst = SubPost(pathToImage: subpost["pathToImage"] as? [String])                 if let userID = subpost["userID"] as? String {                     subposst.postID = postID                     subposst.userID = userID                 }                 self.subposts.append(subposst)             }             self.collectionview.reloadData()          }     })     ref.removeAllObservers() } 

This is the collectionView function:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {     let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "subPostCell", for: indexPath) as! SubPostCell      cell.subPostImage.downloadImage(from: self.subposts[indexPath.row].pathToImage)      return cell     }  } 

There is an error in the line:

cell.subPostImage.downloadImage(from: self.subposts[indexPath.row].pathToImage) With an error of:

Cannot convert value of type '[String]?' to expected argument type 'String?'

Can't seem to figure this out. Any sort of help is very much appreciated! Thanks in advance!

</div
        

回答リスト

1
 
vote
vote
ベストアンサー
 

オプションの文字列配列 pathToImage: [String]? として宣言しましたが、オプションの文字列として扱おうとしています。これはうまくいきません。これはエラーメッセージが指摘しているものです。

downloadImage に渡したい配列からの文字列を指定する必要があります。例えば:

<事前> <コード> cell.subPostImage.downloadImage(from: self.subposts[indexPath.row].pathToImage![0])
 

You declared as an optional string array pathToImage: [String]?, but are then trying to treat it as an optional string. That won't work, which is what the error message points out.

You'll need to indicate in your code what string from the array you want to pass to downloadImage. For example:

cell.subPostImage.downloadImage(from: self.subposts[indexPath.row].pathToImage![0]) 
</div
 
 
     
     

関連する質問

4  Google PlayとApp内の請求を作成します  ( Create products google play and in app billing ) 
多くのアイテムを持つ ObservableList<Exercise> filteredExercises = FXCollections.observableArrayList(); ObservableList<Exercise> exercises =...

0  データを保存イベントに保存します。しかし、Event_Keyの割り当て{Ref:Event_Key} Firebaseリアルタイムデータベース  ( Data save to event i get push key but issue while event key assign eventlist ) 
私はイベントの一部を保存し、その場所/ key iがユーザーリファレンスに必要な場所/キーを保存しました。だから私はuser / eventlist {ref:event_key}を保存しようとしました。しかし、私はエラーが発生したとしてもエラーが発生しました...

0  引数タイプ 'TYPE'をパラメータ型 'FirebaseUser'に割り当てることはできません。  ( The argument type type cant be assigned to the parameter type firebaseuser ) 
この関数(_SendToServer)を減圧関数で呼び出すたびに、このエラーが発生します。 error:引数型 'type'をパラメータ型 'firebaseUser'に割り当てることはできません。 (argument_type_not_ashignable...

2  FireBaseデータベースに新しい子が追加されたときに通知を送信する  ( Send notification when new child is added to firebase database ) 
私は私のアプリでFirebaseデータベースを使用しています、そして私はデータベースに新しい順序が追加されたときに管理者に通知を送信する必要があります "データベースに追加された新しい子" "。 私はFirebase Cloudメッセージングと呼ばれるものを見...

0  TyPerror:設定はAngularjsの関数ではありません  ( Typerror set is not a function with angularjs ) 
私はこのエラーに遭遇しています: typeError:fb.setは関数ではありません、angular.js:13550 私のFirebaseデータベースにデータを送信しようとしている間。 私はここで行方不明のものを理解していません、私はドキュメントを調べ...

2  Androidで機能しないFirebase検索クエリ  ( Firebase search query not working on android ) 
私は私のAndroidアプリで検索を実装しています、そして私はそれを仕事にするようには思われることはできません。 <事前> <コード> HttpClient1 <コード> 998876612 または<コード>のいずれかを削除すると、2つのデータのいずれか...

1  FireBaseデータベースからUIDを読む方法  ( How to read uids from firebase database ) 
許可された許可、これらのUIDの読み方は?私は運ずつこれを試してみました: <事前> <コード> *3 <事前> <コード> *4 ...

0  データスナップショット間のFireBaseリアルタイムデータの違い  ( Firebase realtime databse difference between data snapshots ) 
のようなデータベース構造がある場合は、図のようにクエリを作成します。以下。 snapshot.forEach(function(childSnapshot) を使用して各ノードにアクセスした場合、データベースからスナップショットをダウンロードするために使用...

0  Firebaseを同期的に読み込む  ( Read firebase in synchronously ) 
私のコードの残りのコードと並んで私のFirebaseデータベースを読む方法を作成しようとしています。私はこれを行うためにリエントラントロックを使おうとしていますが、それは機能していません。出力を > ---------- a ---------- B --...

1  NG-SHOW / NG-HIDE VALUEがFireBaseからデータを取得した後は変更されていませんか?  ( Ng show ng hide value is not changing after getting the data from firebase ) 
Firebaseからデータを受信して​​いるとき、私はNG-Show / NG-HIDE値の範囲をfalseに変更しています。私のビューの中のものには影響しません。 スコープ値がもう一度クリックすると変更されているが、値を動的に更新する必要があります。 この...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有