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)
给出:
提前感谢您的帮助。
我正在尝试制作计算器应用程序(用于特定目的),我想知道是否存在将 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)
给出: