Как исправить ошибку в коде, чтобы не ругался xcode?
Написал следующий код для интеграции полноэкранной рекламыв приложение ios. Xcode выдает ошибку: Type 'YandexInter' does not conform to protocol 'UIViewControllerRepresentable'
Как ее исправить? Подскажите, пожалуйста. Вот код:
struct YandexInter : UIViewControllerRepresentable {
typealias UIViewControllerType = YMAInterstitialAd
func makeUIViewController(context: Context) -> YMAInterstitialAd
{
let adViewAdIn = YMAInterstitialAd(adUnitID: "R-M-2248734-1")
adViewAdIn.delegate = context.coordinator
adViewAdIn.load()
return adViewAdIn
}
func updateUIViewController(_ uiView: YMAInterstitialAd, context: Context) {}
func makeCoordinator() -> Coordinator
{
Coordinator()
}
class Coordinator: NSObject, YMAInterstitialAdDelegate
{
var interstitialYandexAd: YMAInterstitialAd!
func loadInterstitial(){
//self.interstitialYandexAd = YMAInterstitialAd(adUnitID: "R-M-2248734-1")
//self.interstitialYandexAd?.load()
self.interstitialYandexAd.delegate = self
}
func interstitialAdDidLoad(_ interstitialYandexAd: YMAInterstitialAd) {
let scenes = UIApplication.shared.connectedScenes
let windowScene = scenes.first as? UIWindowScene
let window = windowScene?.windows.first
let root = window?.rootViewController
self.interstitialYandexAd.present(from: root!)
print("Loaded Adv.")
}
func interstitialAdDidFail(toLoad interstitialYandexAd: YMAInterstitialAd, error: Error) {
print("Loading failed. Error: \(error)")
}
func interstitialAdDidFail(toPresent interstitialAd: YMAInterstitialAd, error: Error) {
print("Presenting failed. Error: \(error)")
}
}
}
Ответы (1 шт):
Автор решения: Oleg Soloviev
→ Ссылка
Посмотрел фреймворк YandexMobileAds, сущность YMAInterstitialAd не является вьюконтроллером, поэтому метод makeUIViewController возвращает неправильный тип и из-за этого YandexInter не конформит протокол UIViewControllerRepresentable. Как вариант, вы можете сделать свой вьюконтроллер:
import SwiftUI
import YandexMobileAds
struct ContentView: View {
var body: some View {
AdView()
}
}
struct AdView: UIViewControllerRepresentable {
func makeUIViewController(context: Context) -> InterstitialViewController {
InterstitialViewController()
}
func updateUIViewController(_ uiViewController: InterstitialViewController, context: Context) {}
}
class InterstitialViewController: UIViewController {
private var iAd: YMAInterstitialAd?
override func viewDidLoad() {
super.viewDidLoad()
iAd = YMAInterstitialAd(adUnitID: "demo-interstitial-yandex")
iAd?.delegate = self;
iAd?.load()
}
}
extension InterstitialViewController: YMAInterstitialAdDelegate {
func interstitialAdDidLoad(_ interstitialAd: YMAInterstitialAd) {
iAd?.present(from: self)
print("Ad loaded")
}
}