【问题标题】:Swift 3.0 convert Double() to NSMutableAttributedStringSwift 3.0 将 Double() 转换为 NSMutableAttributedString
【发布时间】:2016-11-16 19:26:28
【问题描述】:

提前感谢您的帮助。

我正在尝试制作计算器应用程序(用于特定目的),我想知道是否存在将 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() - 我期待着答案。

【问题讨论】:

    标签: string double swift3 nsattributedstring nsmutableattributedstring


    【解决方案1】:

    据我了解,您的输入字符串(在您自己的答案中命名为“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)
    

    给予:

    【讨论】:

    • 当然,如果我误解了,如果您确实需要NSMutableAttributedStrings 作为输入,请发表评论,以便我更新...或删除。 ;)
    • 感谢您的回复!我非常喜欢你的方式。问题是有时我甚至需要在之前放置属性字符串(例如 V_Ed = 21 m^2; _ 下标,^ 上标)。除了“.append”之外,我找不到真正的教程如何做到这一点。您实际创建 NSMutableAttributedString 结果的方式以及稍后仅附加属性的方式比我的情况要好得多且通用,因为您可以稍后在文本的任何部分设置属性的任何部分。你回答了我的问题,再次感谢!
    【解决方案2】:

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

    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"
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-19
      • 2015-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多