我試圖在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