如何将任何对象类型转换为字符串?

let single_result = results[i]
var result = ""
result = single_result.valueForKey("Level")

现在我得到错误:无法将任何对象的类型值赋给string类型的值。

如果我投了它:

result = single_result.valueForKey("Level") as! String

我收到错误:无法将'__NSCFNumber'(0x103215cf0)类型的值转换为'NSString'(0x1036a68e0)。

我该如何解决这个问题?

===============>>#1 票数:28 已采纳

您不能将任何随机值转换为字符串。 如果无法将对象强制转换为字符串,则强制转换( as! )将失败。

如果您知道它将始终包含NSNumber,那么您需要添加将NSNumber转换为字符串的代码。 这段代码应该有效:

if let result_number = single_result.valueForKey("Level") as? NSNumber
{
  let result_string = "\(result_number)"
}

如果为“Level”键返回的对象可以是不同的对象类型,那么您将需要编写更灵活的代码来处理其他可能的类型。

Swift数组和字典通常是打字的,这使得这种东西更清晰。

我会说@ AirSpeedVelocity的回答(欧洲或非洲?)是最好的。 使用内置的toString函数。 听起来它适用于任何Swift类型。

编辑:

在Swift 3中,答案似乎已经改变。 现在,您要使用String初始化程序

init(describing:)

或者,使用问题中的代码:

result = single_result.valueForKey("Level")
let resultString = String(describing: result)

请注意,通常您不需要valueForKey。 这是一个只适用于NSObjects的KVO方法。 假设single_result是一个Dictionary,您可能需要这种语法:

result = single_result["Level"]

===============>>#2 票数:6

toString函数接受任何类型,并始终生成一个字符串。

如果它是一个实现Printable协议的Swift类型,或者覆盖了NSObject的description属性,那么你将获得.description属性返回的任何内容。 NSNumber的情况下,您将获得该数字的字符串表示。

如果没有,你将获得一个相当无用的类名字符串加上内存地址。 但是大多数标准类,包括NSNumber ,都会产生一些合理的东西。

import Foundation

class X: NSObject {
    override var description: String {
        return "Blah"
    }
}

let x: AnyObject = X()
toString(x)  // return "Blah"
"\(x)"  // does the same thing but IMO is less clear

struct S: Printable {
    var description: String {
        return "asdf"
    }
}

// doesn't matter if it's an Any or AnyObject
let s: Any = S()
toString(s) // reuturns "asdf"

let n = NSNumber(double: 123.45)
toString(n)    // returns "123.45"
n.stringValue  // also works, but is specific to NSNumber

(ps总是使用toString而不是测试Printable 。首先, String不符合Printable ......)

===============>>#3 票数:1

toString()似乎不再存在于Swift 3中。

看起来有一个可用的初始值设定项将返回传入的值的description

init?(_ description: String)

文档https://developer.apple.com/reference/swift/string/1540435-init

  ask by da1lbi3 translate from so

未解决问题?本站智能推荐:

1回复

将对象数组转换为字符串数组

如何将该对象数组转换为字符串数组? 我正在读取Firebase集合中的记录。 该数组的当前输出为: [MainApp.Message(name:Optional(“ Oliver”),userId:Optional(“”),msg:Optional(“”),creatAt:O
2回复

将对象转换为JSON字符串以进行POST请求

我有一个对象,它是与此类似的类的实例: AnotherClass类似于: 好的,现在我需要将该对象(MyClass的实例)作为具有以下格式的POST请求字符串参数传递: 任何想法如何实现这一目标? 我正在使用Swift 1.2(和SwiftyJSON,如果有帮助的话),
1回复

Swift 2.0将对象数组转换为JSON字符串

这是我的课: 那就是我获取对象数组的字符串的方式: 现在我得到这个错误: 由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'JSON写入中的类型无效(Test.Coordinate)' 有人可以帮我解决这个问题吗?
2回复

如何在iOS Swift中将对象数组转换为Json数组或Json字符串?

我有一个数组,其中有一组对象var quiz_anwers_list = [QuizQu]() “ QuizQu”是一个包含2个变量的类 现在有 这些打印的输出是: 现在如何将其转换为JsonArray或JSON String? 我是iOS的新手。
1回复

将字符串编码数组转换为对象

所以我从服务器的字符串形式获取此数组与对象的所有坐标,如下所示: 我将如何将其转换为数组? 先感谢您! 所以我希望它的形式[[Double]] 所以,如果我要做objects[0][0]它应该返回[-0.340254,51.605946] }
2回复

在Swift中将任何对象转换为字符串

当前,testArray是AnyObject。 我正在尝试将testScoreOne表示的testArray[0][0] testScoreOne为字符串,而不是anyObject 。 我的代码中没有任何anyObject声明,因此我不确定Xcode从何处获取此声明。
1回复

无法将json字符串转换为json对象

输出将是:- 预期结果 :
3回复

将一个JSON字符串转换为swift上的JSON对象

我需要将let JSON字符串转换为对象。 以下是一些带有示例的代码,但它不起作用
2回复

在Swift中将JSON字典对象转换为字符串

我有一段时间尝试将字典对象转换为可以导出到.json文件的字符串。 我努力了 : 这立即失败: ***由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'JSON写入中的类型无效(__NSDate)' 这是我的字典对象:
1回复

如何将解析日期对象转换为字符串?

初学者警报 我正在尝试从PFUser查询日期,然后将其格式化为NSDate,因此它更有用。 当我尝试将对象转换为NSString时,麻烦就开始了,所以我可以使用NSDateFormatter()对其进行格式化 这样做的正确方法是什么? 此外,如果我没有将变量类型指定为AnyOb