Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Swift中向Unicode字符串添加属性?_Unicode_Swift - Fatal编程技术网

如何在Swift中向Unicode字符串添加属性?

如何在Swift中向Unicode字符串添加属性?,unicode,swift,Unicode,Swift,如何在Swift中为UNICODE字符串添加属性 对于可变字节长度的UNICODE字符串,NSMakerRange似乎需要以字节为单位的字符串 有办法解决这个问题吗?提前谢谢 var s:NSMutableAttributedString = NSMutableAttributedString(string: "வாங்க வாங்க வணக்கமுங்க") s.string[0...2] s.addAttribute(NSForegroundColorAttributeName, value

如何在Swift中为UNICODE字符串添加属性

对于可变字节长度的UNICODE字符串,NSMakerRange似乎需要以字节为单位的字符串

有办法解决这个问题吗?提前谢谢

var s:NSMutableAttributedString = NSMutableAttributedString(string: "வாங்க வாங்க வணக்கமுங்க")
s.string[0...2]
s.addAttribute(NSForegroundColorAttributeName, value:UIColor(red:0.0, green:1.0, blue:0.0, alpha:1.0), range:NSMakeRange(0,3))
更新示例:

let text = "வாங்க வாங்க வணக்கமுங்க"
var startOfWord = advance(text.startIndex, 4)
var endOfWord = advance(startOfWord, 3)
var highlightRange = startOfWord..<endOfWord
text[startOfWord..<endOfWord]

let attrText = NSMutableAttributedString(string:text)
attrText.addAttribute(NSForegroundColorAttributeName, value:UIColor(red:0.0, green:1.0, blue:0.0, alpha:1.0), range:highlightRange)
let text=”வாங்க வாங்க வணக்கமுங்க"
var startOfWord=advance(text.startIndex,4)
var endOfWord=前进(开始字,3)

var highlightRange=startOfWord..您可以通过以下方式将swift字符串转换为swift NSString

var strAsNSString = "வாங்க வாங்க வணக்கமுங்க" as NSString

然后您可以创建NSMutableAttributedString。

类似的方法可能会奏效:

let text = "வாங்க வாங்க வணக்கமுங்க"
var startOfWord = advance(text.startIndex, 5)
var endOfWord = advance(startOfWord, 5)
var range = startOfWord..<endOfWord
let text=”வாங்க வாங்க வணக்கமுங்க"
var startOfWord=advance(text.startIndex,5)
var endOfWord=前进(开始字,5)

var range=startOfWord..我希望下面的函数可以帮助您

func findAndAddAttributeString(str: String, query : String) {

    let strASNSString = str as NSString

    println("employeeIdAsNSString, \(strASNSString)")

    var attributeDictionary = NSMutableDictionary(objects: [UIColor.grayColor(), UIFont.systemFontOfSize(17)], forKeys: [NSForegroundColorAttributeName, NSFontAttributeName])


    println("attributeDictionary, \(attributeDictionary)")

    var attributedEmployeeId = NSMutableAttributedString(string: strASNSString, attributes: attributeDictionary)

    println("attributedEmployeeId = \(attributedEmployeeId)")

    var error:NSError?

    var regex = NSRegularExpression.regularExpressionWithPattern(query, options: NSRegularExpressionOptions.CaseInsensitive, error: &error)
    println("regex = \(regex)")

    var range = NSMakeRange(0, strASNSString.length)
    println("range = \(range)")

    regex.enumerateMatchesInString(strASNSString, options: nil, range: range, usingBlock:{ (textCheckingResult, MatchingFlags, unsafePointer) in
        println("textCheckingResult \(textCheckingResult.rangeAtIndex(0))")
        var subStringRange = textCheckingResult.rangeAtIndex(0)
        attributedEmployeeId.addAttribute(NSForegroundColorAttributeName, value: UIColor.redColor(), range: subStringRange)
        })
}

我为
String
创建了一个小扩展,它既适用于基于
Index
的范围,也适用于基于
Int
的范围

extension String {
    func NSRangeFromRange(swiftRange: Range<Index>) -> NSRange {
        let start = swiftRange.startIndex.samePositionIn(utf16)
        let end = swiftRange.endIndex.samePositionIn(utf16)
        return NSRange(location: utf16.startIndex.distanceTo(start), length: start.distanceTo(end))
    }
    func NSRangeFromRange(swiftRange: Range<Int>) -> NSRange {
        let indexRange = Range(start: startIndex.advancedBy(swiftRange.startIndex), end: startIndex.advancedBy(swiftRange.endIndex))
        return NSRangeFromRange(indexRange)
    }
}
扩展字符串{
func NSRangeFromRange(swiftRange:Range)->NSRange{
让start=swiftRange.startIndex.samePositionIn(utf16)
让end=swiftRange.endIndex.samePositionIn(utf16)
返回NSRange(位置:utf16.startIndex.distanceTo(开始),长度:start.distanceTo(结束))
}
func NSRangeFromRange(swiftRange:Range)->NSRange{
让indexRange=Range(开始:startIndex.advancedBy(swiftRange.startIndex),结束:startIndex.advancedBy(swiftRange.endIndex))
返回NSRangeFromRange(indexRange)
}
}

注意:函数位于
String
类上,因为我们需要strings
UTF16View
在支持Unicode的
范围
和不支持Unicode的
NSRange
之间进行转换。谢谢。问题不是创建NSMutableAttributeString。问题是找到用于添加属性的范围。s.String[4..6]将给出第二个单词,例如,如果我需要突出显示该第二个单词,我如何使用NSMakeRange指定范围-该范围应以字节为单位。挑战是从swift range构造NSRange。我们如何做到这一点?
let text=”வாங்க வாங்க வணக்கமுங்க“
var startoford=advance(text.startIndex,4)
var endoford=advance(startoford,3)
var highlightRange=startOfWord..对于UNICODE字符串,.length可能不起作用。用于查找精确范围的countElements和advance方法可能不起作用。有一种情况下,这种方法不能产生正确的结果,那就是带有肤色修饰符的表情符号。然而,这是Swift中的一个错误,因为它们会报告t字符的长度,如