Google Mobile Native Express 广告 iOS - [AnyObject] 的问题
Google Mobile Native Express ads iOS - Issues with [AnyObject]
我正在尝试在我的 iOS 项目中使用 swift.
实施 Native Express Ads
首先我有一个class
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
}
//...
}
class 从 Internet 获取 JSON 并填充表格视图。
我也有一些功能,比如搜索事件的名称,还有一个按日期过滤事件的按钮。
所有这些都适用于下面的代码
var eventData = [Events]()
var filteredEvents = [Events]()
eventData.sort() { [=13=].realDate < .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() { (([=16=] as! Events).realDate ) < ( as! Events).realDate }
虽然 eventData
数组还包含 GADNativeExpressAdView
因为在我上面链接的示例中有这段代码可以下载 express native 广告并将它们附加到 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
广告。
对这个有什么想法吗?
首先,在您的 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
}
这是一个示例代码,我还没有测试它是否按预期工作,但它应该能让您了解如何继续。
P.S。我认为将数据与视图混合不是一个好习惯。你应该保持你的数组没有视图并且只包含数据。
我正在尝试在我的 iOS 项目中使用 swift.
实施 Native Express Ads首先我有一个class
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
}
//...
}
class 从 Internet 获取 JSON 并填充表格视图。 我也有一些功能,比如搜索事件的名称,还有一个按日期过滤事件的按钮。 所有这些都适用于下面的代码
var eventData = [Events]()
var filteredEvents = [Events]()
eventData.sort() { [=13=].realDate < .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() { (([=16=] as! Events).realDate ) < ( as! Events).realDate }
虽然 eventData
数组还包含 GADNativeExpressAdView
因为在我上面链接的示例中有这段代码可以下载 express native 广告并将它们附加到 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
广告。
对这个有什么想法吗?
首先,在您的 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
}
这是一个示例代码,我还没有测试它是否按预期工作,但它应该能让您了解如何继续。
P.S。我认为将数据与视图混合不是一个好习惯。你应该保持你的数组没有视图并且只包含数据。