想象一下,你有一个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的字符类型的更多相关文章

  1. Html5 canvas实现粒子时钟的示例代码

    这篇文章主要介绍了Html5 canvas实现粒子时钟的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. 为什么这个OpenGL ES 2.0着色器不能在iOS上使用我的VBO?

    如果有人能够了解这里出了什么问题,也许是对gl命令或其他一些不兼容的命令序列的错误排序,我将非常感谢你的帮助.尽管谷歌在“OpenGLES2.0编程指南”中进行了大量研究和研究,但我一直试图让这段代码整天都没有成功.我正在尝试在iPhone上的OpenGLES2.0中使用顶点缓冲区对象和自定义着色器.我试图交错来自以下类型的一系列自定义结构的顶点数据:位置,半径和颜色字节分别考虑顶点位置,点大小和

  3. 在Xcode4中,你可以更改用于显示隐形字符的字符吗?

    我更喜欢VisualStudio显示隐形的方式……

  4. ios – 应用程序商店描述特殊字符

    是不是可以在AppStore描述中使用像星星这样的特殊字符了?我得到这个错误:描述不得包含标记语言.说明不得包含以下字符:★提前致谢:)解决方法仍然允许一些unicode字符.以下字符已经过测试并仍然有效:◆√至于现在他们工作正常,但苹果可以随时再次改变条件.

  5. ios – 将数组中的字符转换为整数

    即使我搜索了文档,我似乎无法弄清楚如何做到这一点.我试图弄清楚如何将数组中索引处的字符转换为整数.例如,假设我有一个名为“容器”的字符数组,我无法弄清楚该怎么做:谢谢您的帮助!解决方法Swift并不容易在原始和类型表示之间进行转换.这是一个在此期间应该有所帮助的扩展:这使您可以非常接近您想要的:对于遇到此问题的任何工程师,请参阅rdar://17494834

  6. ios – 创建一个包含n个空格或其他重复字符的字符串

    我想使用Swift使用n个空格进行字符串,但不使用for循环或手动如下所示:解决方法String已经有一个repeating:count:initializer就像Array(和其他采用RangeReplaceableIndexable协议的集合):所以你可以打电话:请注意,重复的参数是一个字符串,而不仅仅是一个字符,因此您可以重复整个序列:编辑:更改为Swift3语法,并删除了关于Swift1类

  7. ios – 如何使用Unicode十六进制值(UTF-16)在Swift中表达字符串

    我想在Swift中使用十六进制值编写一个Unicode字符串.我已经阅读了字符串和字符的documentation,所以我知道我可以使用特殊的Unicode字符直接在字符串如下:版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  8. ios – 将两个字符串转换为一组布尔值的快速方法是什么?

    我有一个长字符串,我想转换为一个布尔值数组.而且它需要很多次,很快.我天真的尝试是这样的:但这比我想要的要慢很多.我的剖析告诉我,地图是减速的地方,但我不知道我能做多么简单.我觉得如果没有Swift’s/ObjC的开销,这样做会很快.在C中,我认为这是一个简单的循环,其中一个字节的内存与一个常量进行比较,但我不知道我应该看的是什么函数或语法.有更好的办法吗?

  9. 在iOS上默认是char签名还是未签名?

    默认情况下,iOS上是否签名或未签名?(我认为这将是一个很好的回答问题,但奇怪的是谷歌没有任何用处!

  10. iOS设备UDID是否区分大小写?

    这是关于将设备添加到供应门户以进行临时测试.客户端向我发送了一个带有大写字符的UDID,我愚蠢地添加了这些字符而没有检查.无线部署不起作用,我想知道这是否可能是原因,但我想在使用我的100个分配之一之前先检查.解决方法是的,UDID区分大小写.如果它不是数字,您可以浏览所有字符并将它们转换为小写字符.

随机推荐

  1. Swift UITextField,UITextView,UISegmentedControl,UISwitch

    下面我们通过一个demo来简单的实现下这些控件的功能.首先,我们拖将这几个控件拖到storyboard,并关联上相应的属性和动作.如图:关联上属性和动作后,看看实现的代码:

  2. swift UISlider,UIStepper

    我们用两个label来显示slider和stepper的值.再用张图片来显示改变stepper值的效果.首先,这三个控件需要全局变量声明如下然后,我们对所有的控件做个简单的布局:最后,当slider的值改变时,我们用一个label来显示值的变化,同样,用另一个label来显示stepper值的变化,并改变图片的大小:实现效果如下:

  3. preferredFontForTextStyle字体设置之更改

    即:

  4. Swift没有异常处理,遇到功能性错误怎么办?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 字典实战和UIKit初探

    ios中数组和字典的应用Applicationschedule类别子项类别名称优先级数据包contactsentertainment接触UIKit学习用Swift调用CocoaTouchimportUIKitletcolors=[]varbackView=UIView(frame:CGRectMake(0.0,0.0,320.0,CGFloat(colors.count*50)))backView

  6. swift语言IOS8开发战记21 Core Data2

    上一话中我们简单地介绍了一些coredata的基本知识,这一话我们通过编程来实现coredata的使用。还记得我们在coredata中定义的那个Model么,上面这段代码会加载这个Model。定义完方法之后,我们对coredata的准备都已经完成了。最后强调一点,coredata并不是数据库,它只是一个框架,协助我们进行数据库操作,它并不关心我们把数据存到哪里。

  7. swift语言IOS8开发战记22 Core Data3

    上一话我们定义了与coredata有关的变量和方法,做足了准备工作,这一话我们来试试能不能成功。首先打开上一话中生成的Info类,在其中引用头文件的地方添加一个@objc,不然后面会报错,我也不知道为什么。

  8. swift实战小程序1天气预报

    在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。然后在btnpressed方法中依旧增加loadWeather方法.在loadWeather方法中加上信息的显示语句:运行一下看看效果,如图:虽然显示出来了,但是我们的text是可编辑状态的,在storyboard中勾选Editable,再次运行:大功告成,而且现在每次单击按钮,就会重新请求天气情况,大家也来试试吧。

  9. 【iOS学习01】swift ? and !  的学习

    如果不初始化就会报错。

  10. swift语言IOS8开发战记23 Core Data4

    接着我们需要把我们的Rest类变成一个被coredata管理的类,点开Rest类,作如下修改:关键字@NSManaged的作用是与实体中对应的属性通信,BinaryData对应的类型是NSData,CoreData没有布尔属性,只能用0和1来区分。进行如下操作,输入类名:建立好之后因为我们之前写的代码有些地方并不适用于coredata,所以编译器会报错,现在来一一解决。

返回
顶部