![](/img/trans.png)
[英]Flutter plugin: No such module 'google_mobile_ads' in iOS native code
[英]Google Mobile Native Express ads iOS - Issues with [AnyObject]
我正在尝试在我的iOS项目中快速实施Native Express Ads。
首先我上课
class Events {
var _eventName: String!
var _realDate: Date!
var realDate: Date {
if _realDate == nil {
_realDate = nil
}
return _realDate
}
var eventName: String {
if _eventName == nil {
_eventName = ""
}
return _eventName
}
//...
}
哪个类正在从Internet获取JSON,并且它填充了tableview。 我也有一些功能,例如搜索事件名称,还有一个按日期过滤事件的按钮。 所有这些都可以在下面的代码中正常工作
var eventData = [Events]()
var filteredEvents = [Events]()
eventData.sort() { $0.realDate < $1.realDate }
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
filteredEvents = eventData.filter { events in
return events.eventName.lowercased().contains(searchText.lowercased())
}
首先我改变了
var eventData = [Events]()
var filteredEvents = [Events]()
至
var eventData = [AnyObject]()
var filteredEvents = [AnyObject]()
因此,可以按照我在下面的函数addNativeExpressAds()
所示将广告追加到数组中! 我对函数sort()
和filter
有问题。
对于sort()
它说Value of type 'AnyObject' has no member 'realDate'
对于filter
它说Value of type 'AnyObject' has no member 'eventName'
更新1.在对Google进行了一些研究之后,我发现这可能是sort()
函数的解决方案
eventData.sort() { (($0 as! Events).realDate ) < ($1 as! Events).realDate }
尽管eventData
数组还包括GADNativeExpressAdView
因为在我上面链接的示例中,此代码块下载了快速的原生广告并将其附加到AnyObject
Array eventData
请参见下文
func addNativeExpressAds() {
var index = adInterval
// Ensure subview layout has been performed before accessing subview sizes.
nearMeTable.layoutIfNeeded()
while index < eventData.count {
let adSize = GADAdSizeFromCGSize(
CGSize(width: nearMeTable.contentSize.width, height: adViewHeight))
guard let adView = GADNativeExpressAdView(adSize: adSize) else {
print("GADNativeExpressAdView failed to initialize at index \(index)")
return
}
adView.adUnitID = adUnitID
adView.rootViewController = self
adView.delegate = self
eventData.insert(adView, at: index) //here it inserts the ads
adsToLoad.append(adView)
loadStateForAds[adView] = false
index += adInterval
}
}
这样我得到了错误
Could not cast value of type 'GADNativeExpressAdView' (0x10046ebd8) to 'Events_Near_Me.Events' (0x10046fb90).
因此,我无法对任何对象的数组进行排序,从而导致数组中的GADNativeExpressAdView
广告出现。
对这个有任何想法吗?
首先,在您的sort
功能中,您必须强制转换!
转换为Event
类型,但您的数组不仅仅包含Event
对象。 因此,您强制执行强制转换,代码将失败。
eventData.sort { (first, second) in
if let first = first as? Event,
let second = second as? Event {
return first.realDate < second.realDate
}
if let fist = first as? GADNativeExpressAdView,
let second = second as? GADNativeExpressAdView {
return \\ compare?
}
return false
}
这是一个示例代码,我尚未对其进行测试以查看其是否按预期工作,但它应该为您提供如何进行操作的思路。
PS:我认为将数据与视图混合并不是一种好习惯。 您应该保持阵列中的视图干净,并且只包含数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.