在 Swift Linux 中使用 'Any' 和 'AnyObject' 类型会出错
Using 'Any' and 'AnyObject' types in Swift Linux gives errors
我有这行代码:
produceJSONMessage(message: message as AnyObject)
在 XCode (Mac) 中工作正常。但是使用 swift build
在 linux 中构建它会产生错误:
/home/ubuntu/x/x/objects.swift:x:x: error: 'Any' is not convertible to 'AnyObject'; did you mean to use 'as!' to force downcast?
produceJSONMessage(message: message as AnyObject)
所以我听从了它的建议,使用了produceJSONMessage(message: message as! AnyObject)
。它在构建过程中不会抛出错误,但会在运行时崩溃:
Could not cast value of type 'Any' (0x9aab88) to 'Swift.AnyObject' (0x7f7c84007c88).
无论如何我都构建了它并且没有抛出错误:
produceJSONMessage(message: message as? AnyObject)
新问题是函数接收到对象时,总是nil(进入函数前不是nil)。这是函数签名:
func produceJSONMessage(message: AnyObject? = nil)
其中 message
通常是 String:Any 类型或普通字符串
这里有什么需要注意的吗?我发布的代码的所有组合都适用于 Mac XCode。
我通过从上面的代码中删除 AnyObject
并将其替换为 Any
来使其工作。也许我误用了 AnyObject
类型,但它在 Mac 中构建正常但在 Linux 中构建错误并没有帮助!
我有这行代码:
produceJSONMessage(message: message as AnyObject)
在 XCode (Mac) 中工作正常。但是使用 swift build
在 linux 中构建它会产生错误:
/home/ubuntu/x/x/objects.swift:x:x: error: 'Any' is not convertible to 'AnyObject'; did you mean to use 'as!' to force downcast?
produceJSONMessage(message: message as AnyObject)
所以我听从了它的建议,使用了produceJSONMessage(message: message as! AnyObject)
。它在构建过程中不会抛出错误,但会在运行时崩溃:
Could not cast value of type 'Any' (0x9aab88) to 'Swift.AnyObject' (0x7f7c84007c88).
无论如何我都构建了它并且没有抛出错误:
produceJSONMessage(message: message as? AnyObject)
新问题是函数接收到对象时,总是nil(进入函数前不是nil)。这是函数签名:
func produceJSONMessage(message: AnyObject? = nil)
其中 message
通常是 String:Any 类型或普通字符串
这里有什么需要注意的吗?我发布的代码的所有组合都适用于 Mac XCode。
我通过从上面的代码中删除 AnyObject
并将其替换为 Any
来使其工作。也许我误用了 AnyObject
类型,但它在 Mac 中构建正常但在 Linux 中构建错误并没有帮助!