Swift   发布时间:2022-03-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了NSCharacterSet.characterIsMember()与Swift的字符类型大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

想象一下,你有一个Swift的字符类型的实例,你想要确定它是否是一个NSCharacterSet的成员。 NSCharacterSet的characterIsMember方法需要一个unichar,所以我们需要从Character到unichar。 我可以想出的唯一解决方案是以下,其中c是我的性格: let u: unichar = ("\(C)" as NSString).characterAt
想象一下,你有一个Swift的字符类型的实例,你想要确定它是否是一个NSCharacterSet的成员。 NSCharacterSet的characterIsMember方法需要一个unichar,所以我们需要从Character到unichar。

我可以想出的唯一解决方案是以下,其中c是我的性格:

let u: unichar = ("\(C)" as NSString).characterATindex(0)
if characterSet.characterIsMember(u) {
    dude.abide()
}

我看着字符,但没有跳跃在我作为一种方式从它到unichar。这可能是因为字符比unichar更通用,所以直接转换不会是安全的,但我只是猜测。

如果我迭代一个整个字符串,我会做这样的事情:

let s = myString as NSString
for i in 0..<countElements(myString) {
    let u = s.characterATindex(i)
    if characterSet.characterIsMember(u) {
        dude.abide()
    }
}

(警告:以上是伪代码,从来没有任何人曾经运行过。)但这不是我真正的问题。

我的理解是unichar是一个typealias UInt16。 unichar只是一个数字。

我认为你面临的问题是,Swift中的一个字符可以由多个unicode“字符”组成。因此,它不能被转换为单个unichar值,因为它可以由两个unichar组成。您可以通过将字符转换为字符串并使用utf16属性将字符分解为各个unichar值,如下所示:

let c: Character = "a"
let s = String(C)
var codeUnits = [unichar]()
for codeUnit in S.Utf16 {
    codeUnits.append(codeUnit)
}

这将产生一个数组 – codeUnits – unichar值。

编辑:初始代码已为codeUnit在s时,它应该是为sUut中的codeUnit

你可以整理和测试每个单独的unichar值是否是这样的字符集:

let char: Character = "\u{63}\u{20dD}" // This is a 'c' inside of an enclosing circle
for codeUnit in String(char).utf16 {
    if NSCharacterSet(charactersinstring: "c").characterIsMember(codeUnit) {
        dude.abide()
    } // dude will abide() for codeUnits[0] = "c",but not for codeUnits[1] = 0x20dd (the enclosing circlE)
}

或者,如果你只对第一个(通常只有)unichar值感兴趣:

if NSCharacterSet(charactersinstring: "c").characterIsMember(String(char).utf16[0]) {
    dude.abide()
}

或者,将其包装在一个函数中:

func isChar(char: Character,inSet set: NSCharacterSet) -> Bool {
    return set.characterIsMember(String(char).utf16[0])
}

let xSet = NSCharacterSet(charactersinstring: "x")
isChar("x",inSet: xSet)  // This returns true
isChar("y",inSet: xSet)  // This returns false

现在使函数检查组合字符中的所有unichar值 – 这样,如果你有一个组合字符,该函数将只返回true如果基本字符和组合字符存在:

func isChar(char: Character,inSet set: NSCharacterSet) -> Bool {
    var found = true
    for ch in String(char).utf16 {
        if !set.characterIsMember(ch) { found = false }
    }
    return found
}

let acuteA: Character = "\u{e1}"                   // An "a" with an accent
let acuteAComposed: Character = "\u{61}\u{301}"    // Also an "a" with an accent

// A character set that includes both the composed and uncomposed unichar values
let charSet = NSCharacterSet(charactersinstring: "\u{61}\u{301}\u{e1}")

isChar(acuteA,inSet: charSet)           // returns true
isChar(acuteAComposed,inSet: charSet)   // returns true (both unichar values were matched

最后的版本很重要。如果你的角色是一个组合的角色,你必须检查基本字符(“a”)和组合字符(急性重音)在字符集的存在,否则你会得到假阳性。

大佬总结

以上是大佬教程为你收集整理的NSCharacterSet.characterIsMember()与Swift的字符类型全部内容,希望文章能够帮你解决NSCharacterSet.characterIsMember()与Swift的字符类型所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。