🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

1回答

447閲覧

【swift】UIImage以外で画像の格納は可能でしょうか?

konakizzi_mk

総合スコア21

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2021/03/04 10:20

編集2021/03/04 10:21

##実現したいこと
引数の型をUIImageからvc(viewcontroller)に変更した場合、どのように画像を格納すれば良いか知りたい。

##ソースコード

swift

1//Attachment.swift 2enum Attachment { 3 case picture([UIImage]) 4 case movie(URL) 5} 6 7//ShareViewController.swift 8class ShareViewController: UIViewController{ 9 10 //省略 11 12 func shareImageForm(image: UIImage) { 13 //処理 14 } 15 16} 17 18//PostPictureViewController.swift 19class PostPictureViewController: UIViewController{ 20 21weak var delegate: PostViewControllerDelegate? 22 //省略 23 24  override func shareImageForm(image: UIImage) { 25 delegate?.postPictureForm(attachment: Attachment.picture([image])) 26 } 27 28} 29 30//PostViewControllerDelegate.swift 31protocol PostViewControllerDelegate: AnyObject { 32 func postPictureForm(attachment: TalkAttachment?) 33} 34

今回ShareViewControllerクラスのshareImageForm()メソッドの引数をimage: UIimageからvc: ~ViewcontrollerとViewControllerを与えた場合、PostPictureViewControllerクラスでoverrideしているshareImageForm()メソッドでUIImageが入れられなくなるので、どのように修正したら格納できるか、もしくはできないのかを知りたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2021/03/04 11:14

vc から画像を取得する手段 (プロパティなど) を用意すれば良いのでは。
guest

回答1

0

UIImage以外で画像の格納は可能でしょうか?

例えばUIImageをpngファイルに保存して、
保存先をStringで持てばUIImage以外で画像を格納できた事になりますか?
WebViewも画像を表示(格納)できます。

引数の型をUIImageからvc(viewcontroller)に変更した場合、どのように画像を格納すれば良いか知りたい。

vcにUIimage型のメンバー変数を持てば、UIViewController型の引数からUIImageを参照できます。

Swift

1class ShareViewController: UIViewController { 2 3 ver myImage: UIimage! 4 5 func shareImageForm(vc: UIViewController) { 6 if vc is PostPictureViewController { 7 let post = vc as? PostPictureViewController 8 self.myImage = post.myImage 9 } 10 } 11 12}

Swift

1class PostPictureViewController: UIViewController { 2 3 ver myImage: UIimage! 4 5}

今回ShareViewControllerクラスのshareImageForm()メソッドの引数をimage: UIimageからvc: ~ViewcontrollerとViewControllerを与えた場合、PostPictureViewControllerクラスでoverrideしているshareImageForm()メソッドでUIImageが入れられなくなるので、どのように修正したら格納できるか、もしくはできないのかを知りたいです。

PostPictureViewControllerでshareImageForm()をoverrideする場合、
PostPictureViewControllerの親クラスはUIViewControllerではなくShareViewControllerになります。
ShareViewControllerのshareImageForm()は画像を格納する機能です。
PostPictureViewControllerのshareImageForm()はデリゲートメソッドを呼び出す機能です。
機能が違うので、無理にoverrideせず別のメソッドとして定義するべきです。

Swift

1class ShareViewController: UIViewController { 2 3 ver shareImage: UIimage! 4 5 func shareImageForm(vc: UIViewController) { 6 if vc is PostPictureViewController { 7 let post = vc as? PostPictureViewController 8 self.shareImage = post.postImage 9 } 10 } 11 12}

Swift

1class PostPictureViewController: ShareViewController { 2 3 ver postImage: UIimage! 4 weak var delegate: PostPictureViewControllerDelegate? 5 6 override func shareImageForm(vc: UIViewController) { 7 8 if vc is ShareViewController { 9 let share = vc as? ShareViewController 10 let attachment = Attachment.picture([share.shareImage]) 11 delegate?.postPictureForm(attachment: attachment) 12 } 13 if vc is PostPictureViewController { 14 let post = vc as? PostPictureViewController 15 let attachment = Attachment.picture([post.postImage]) 16 delegate?.postPictureForm(attachment: attachment) 17 } 18 19 } 20 21} 22 23protocol PostPictureViewControllerDelegate: AnyObject { 24 func postPictureForm(attachment: Attachment?) 25}

実現したい事と質問が合っていないと思うので、欲しい回答を得られていないと思います。
質問に沿って回答すると上記になります。
下記情報が有れば、欲しい回答を得られる事が多くなると思います。
・実現したい全体像
・手法について何故その手法(メソッドの引数を変える)を選択したのか、また試して駄目だった手法。
・クラス間の関係性(ShareがPostを呼び出すのか?PostがShareを呼び出すのか?ShareとPostを呼びだす別のクラスが存在するのか?

投稿2021/03/05 01:28

Ranford

総合スコア64

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問