Swift 3.0 将 Double() 转换为 NSMutableAttributedString

Swift 3.0 convert Double() to NSMutableAttributedString

提前感谢您的帮助。

我正在尝试制作计算器应用程序(用于特定目的),我想知道是否存在将 Double() 转换为 NSMutableAttributedString 的方法。我需要这个作为标签输出答案。

使用 NSMutableAttributedString 的原因是因为我想得到下标和上标的答案。

//example of my code
var a = Double(), b = Double(), c = Double()
a = Double(textField1.text!)
b = Double(textField2.text!)
c = a + b
let font:UIFont? = UIFont(name: "Courier", size:12)
let fontSuper:UIFont? = UIFont(name: "Courier", size:10)


//for x_1 (subscript for "1")
x1_t:NSMutableAttributedString = NSMutableAttributedString(string: "x1", attributes: [NSFontAttributeName:font!])
x1_t.setAttributes([NSFontAttributeName:fontSuper!,NSBaselineOffsetAttributeName:-4], range: NSRange(location:1,length:1))


var result = NSMutableAttributedText()
// what to do to get output for a label like "x_1 = String(c) m"

如果存在另一种方法,例如将 String() 附加到 NSAtributedString() - 我期待答案。

我仍然不确定该怎么做,但我可以创建简单的函数,它大致可以满足我的需要。如果有人有同样的问题,我在这里分享我的答案,但如果有人知道更好的答案,请与他人分享:)

var randomstring = "Random ="

var prestring1 = NSMutableAttributedString(string: randomstring)
var afterstring1 = NSMutableAttributedString(string: "m2")
var result1 = Double()
result1 = 42.1

func stringer (prestring: NSMutableAttributedString, result: Double, afterstring: NSMutableAttributedString) -> NSMutableAttributedString {
var mutableatributedresult = NSMutableAttributedString(string: String(result))
var mutableaddition = NSMutableAttributedString(string: " ")
var alltext = NSMutableAttributedString()

alltext.append(prestring)
alltext.append(mutableaddition)
alltext.append(mutableatributedresult)
alltext.append(mutableaddition)
alltext.append(afterstring)

return alltext
}

stringer(prestring: prestring1, result: result1, afterstring: afterstring1)

//This should give result of "Random = 42.1 m2"

如果有人知道更好的解决方案,我很好奇。

据我了解,您的输入字符串(在您自己的答案中命名为 "prestring1" 和 "afterstring1")可能只是没有属性的普通字符串,因为您只需要将最终结果作为属性字符串.

这将极大地简化您的函数,例如您可以先使用字符串插值,然后只制作一个属性字符串并向上(或向下)移动最后一部分(或您想要的任何部分,我使用的是硬编码范围在我的示例中,但这只是一个示例)。

喜欢:

let randomstring = "Random ="
let afterstring = "m2"
let result: Double = 42.1

func stringer (pre: String,
               result: Double,
               post: String) -> NSMutableAttributedString
{
    let base = "\(pre) \(result) \(post)"
    let mutable = NSMutableAttributedString(string: base)
    mutable.addAttribute(NSBaselineOffsetAttributeName, value: 4,
                         range: NSRange(location: mutable.length - 2, length: 2))
    return mutable
}

let attributedString = stringer(pre: randomstring, result: result, post: afterstring)

给出: