我试图在iOS项目中使用swift实现Native Express Ads。所有的Google移动原生快车广告iOS - 有关[AnyObject]的问题
首先我有一个类
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
}
//...
}
哪个阶级正从互联网JSON和它填补了实现代码如下。 另外我有这样的一些功能搜索事件的名称,也有一个按日期过滤事件的按钮。 所有这些虽然我从here遵循本地快递广告的例子,here
首先我改变
var eventData = [Events]()
var filteredEvents = [Events]()
到
工作正常下面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 = [AnyObject]()
var filteredEvents = [AnyObject]()
So th电子广告可以追加到阵列,如下面的功能addNativeExpressAds()
! 我有问题与功能sort()
和filter
。
为sort()
它说Value of type 'AnyObject' has no member 'realDate'
和filter
它说Value of type 'AnyObject' has no member 'eventName'
更新1 经过对谷歌的一些研究,我发现这可能是sort()
功能的解决方案
eventData.sort() { (($0 as! Events).realDate) < ($1 as! Events).realDate }
尽管eventData
阵列还包含GADNativeExpressAdView
,因为在我已链接的示例中上面还有就是下载表达天然广告,并将它们追加到AnyObject
阵列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
广告。
对此有任何想法?
不相关,但具有支持实例变量以获取常量的属性在Swift中是荒谬的。只要写'let realDate:Date,让eventName:String'并**写一个初始化程序**即可。其次,如果你想在一个数组中组合两种不同的类型,写一个协议,这两种类型都符合,并使用协议作为类型,而不是AnyObject,这总是更糟糕的方式。 – vadian
@vadian嘿!尽管我没有写下整个“课程”,但还是有一个启动者。如果可以的话,你可以给我一个关于“协议”的例子吗? –
不幸的是,没有任何信息如何与'GADNativeExpressAdView'和'Events'相关。 – vadian