- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我可以使用 Swift 的数组轻松完成此操作,而不会出现任何编译器错误:
let array: Array<AnyObject> = Array<String>()
但是当我尝试对自定义类型执行相同操作时,我收到编译器错误:
class Bar<T> {
}
let bar: Bar<AnyObject> = Bar<String>()
错误是:
Cannot convert value of type 'Bar< String>' to specified type 'Bar< AnyObject>'
如何使用自定义类型实现与原生 Swift 数组相同的行为?
最佳答案
首先,请注意,您无法“轻松”执行您的第一个任务,看似来自 [Any]
至[String]
:这看起来有效的原因是你实际上正在初始化一个 Any
的数组。具有 空 数组的元素(恰好是 [String]
类型)。如果您尝试初始化 Any
带有 [String]
的数组保存实际元素的数组,您将遇到运行时错误:
let anyArr1: Array<Any> = Array<String>() // = [], ok
let anyArr2: Array<Any> = [] // ok
let anyArr3: Array<Any> = [String](count: 2, repeatedValue: "foo")
// = ["foo", "foo"], not ok
/* fatal error: can't unsafeBitCast between types of different sizes */
因此,您问题中的比较实际上没有意义。如果要在不同元素类型的两个数组实例之间进行类型转换,则需要一次对一个元素执行此操作,例如使用.map
:
let anyArr4: Array<Any> = [String](count: 2, repeatedValue: "foo").map{ $0 as Any }
print(anyArr4)
// prints "["foo", "foo"]", ok
由于 Swift 是强类型的,Bar<Any>
和Bar<String>
本质上是两种不同的类型。如果您想通过另一个来初始化,则必须为此目的自定义自己的初始化程序,因为这两种不同类型之间的简单赋值或转换将会失败。
关于ios - 将泛型类型分配给具有 AnyObject 类型的泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35720789/
此代码将(在 Swift 1.2 中)在最后一行失败: import Foundation let dictionary1 = [String: AnyObject]() NSUserDefaults
我需要做一些简单的事情,比如将 [AnyObject?] 转换为 [AnyObject]。所以数组中的可选值应该被解包,如果为 nil 则被踢出数组。在 Swift 中有一种简单的方法可以做到这一点吗
我正在尝试使用 UIActivityViewController 共享联系人 .vcf 文件。但我收到“任何对象?”与“AnyObject”不同 下面是我的代码行: let dirs : [Strin
import Cocoa class Brain{ var internalProgram = [AnyObject]() var program:AnyObject{
如何将协议(protocol)实例数组向下转换为 AnyObject?我在下面的代码示例中尝试了一些更合理的想法。 protocol Nameable : class { var name:
在默认模板中我们可以找到以下代码: func application(application: UIApplication, didFinishLaunchingWithOptions launchO
阅读 Apple 的代码我看到了以下内容(谈论钥匙串(keychain)服务): query[kSecAttrService as String] = service as AnyObject? An
我正致力于从 Objective-C 教程转换此委托(delegate)协议(protocol)函数,但在尝试通过使用下标返回基于键的值来访问字典中的值时遇到错误。我不太确定这里的错误是什么意思。任何
我正在尝试使用 performSegueWithIdentifier 将一些字符串数据传递给 View Controller ,但我收到此错误 Cannot convert value of type
如果你看一下这个函数: typealias JSONDictionary = [String: AnyObject] private func allIdentifiersInJson(json: [
我正在尝试调用一个 Objective-C 方法,该方法采用一个 block ,该 block 使用 NSArray 进行回调。 我得到以下编译错误: AnyObject[] 不是 AnyObject
我正在为 IOS 学习 swift ,当我在 youtube 上做巡回演出时(Swift:Skip Wilson 的 Swift:使用外部数据库和 API)对于外部数据库,我找到了部分: servic
我很难理解为什么 AnyObject 的实例等于 Anyobject 的数组,即为什么这个语句 var one: AnyObject = [AnyObject ]() 有效吗? 最佳答案 用这段代码
我有两段几乎相同的代码让我感到困惑。两者都以令我惊讶的方式运作。第一个作品,如下所示: let HTTPBody = NSJSONSerialization.dataWithJSONObject(js
我正在使用 swift 库 "Sync" from Hyperoslo将 JSON 用户转换为核心数据对象。 let user = JSON.valueForKey("user") Sync.chan
我在 Swift 3.0 中工作,我的数组有问题。每行包含一个包含 2 个值的字典。 当我想更改此值时,我收到此消息: “无法使用类型为‘AnyObject’的索引下标类型为‘[AnyObject]’
let otherArray:[AnyObject] = ["a","aa","aaa"] let otherArrayElemnt = otherArray[0] let myArr
我在我的 AppDelegate.swift 文件中发现了这个错误,它出现在 AppDidFinishLaunchingWithOptions 函数中。它在来自 Parse 框架的一行代码上引发错误。
我正在尝试将我当前的项目转换为 Swift 3,但遇到了有关 objectForKey 的问题至 objectFor转换。 myData 的类型是 AnyObject 之前: let x = myDa
我有一个方法: func tableAsDictionary() -> [String: AnyObject] 然后我需要测试这个: let tableDictionary = table.table
我是一名优秀的程序员,十分优秀!