iOSプロジェクトにNative Express広告を迅速に実装しようとしています。Google Mobile Native Express広告iOS - [AnyObject]の問題
まず第一に、私は、インターネットからJSONを取得し、それがテーブルビューに記入されたクラスクラス
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
}
//...
}
を持っています。 また、私はこのようないくつかの機能を持っているイベントの名前を検索し、また、日付でイベントをフィルタリングするボタンがあります。 はすべて私がhereとhere
まずからネイティブ特急広告の例を踏襲しながら、これらはそう
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
も含まれていますが、この例ではリンク済みです急行ネイティブ広告をダウンロードし、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).
を取得AnyObject
配列にそれらを追加し、このコードのブロックがあり、上記任意のオブジェクトの配列は配列内のGADNativeExpressAdView
広告を引き起こします。
これについてのご意見はありますか?あなたのsort
関数内のすべての
関連性はありませんが、定数を取得するバッキングインスタンス変数を持つプロパティは、Swiftではばかげています。 'let realDate:Date、let eventName:String'と書いてイニシャライザ**を書いてください。第2の理由:配列内で2つの異なる型を組み合わせたい場合は、両方の型が適合するプロトコルを記述し、常に悪い方法である 'AnyObject'ではなく型としてプロトコルを使用します。 – vadian
@vadianちょっと!私は全体のクラスを書き留めませんでしたが、初心者がいます。あなたができるなら、あなたは私に例を与えることができますか? –
残念ながら、 'GADNativeExpressAdView'と' Events'がどのように関連しているかについての情報はありません。 – vadian