---
title: "Swift 3 分词"
description: "发布Hipo Mac 版本后，花了一天时间升级Hipo iOS代码到Swift 3，然后准备为**Hipo iOS 增加spotlight 搜索功能**，因此就需要分词作为搜索的关键词。"
url: "https://hicc.pro/p/swift/swift-3-tokenize"
author: "tyler wang"
published: "2016-12-17T16:59:12.000Z"
updated: "2021-02-21T14:19:19.000Z"
category: "Swift"
tags:
  - "Hipo"
  - "iOS 开发"
  - "Swift"
  - "iOS 分词"
  - "Swift_"
  - "CFStringTokenizer"
lang: "zh-CN"
site: "Hipo日志"
---

# Swift 3 分词

发布Hipo Mac 版本后，花了一天时间升级Hipo iOS代码到Swift 3，然后准备为**Hipo iOS 增加spotlight 搜索功能**，因此就需要分词作为搜索的关键词。

下面是简单的实现方式，依赖[CFStringTokenizer - Core Foundation | Apple Developer Documentation](https://developer.apple.com/reference/corefoundation/1666536-cfstringtokenizer).

```

extension String {
    func tokenize() -> [String] {
        let word = self
        let tokenize = CFStringTokenizerCreate(kCFAllocatorDefault, word as CFString!, CFRangeMake(0, word.characters.count), kCFStringTokenizerUnitWord, CFLocaleCopyCurrent())
        CFStringTokenizerAdvanceToNextToken(tokenize)
        var range = CFStringTokenizerGetCurrentTokenRange(tokenize)
        var keyWords : [String] = []
        while range.length > 0 {
            let wRange = word.index(word.startIndex, offsetBy: range.location)..<word.index(word.startIndex, offsetBy: range.location + range.length)
            let keyWord = word.substring(with:wRange)
            keyWords.append(keyWord)
            CFStringTokenizerAdvanceToNextToken(tokenize)
            range = CFStringTokenizerGetCurrentTokenRange(tokenize)
        }
        return keyWords

    }
}

```

![](https://image.hicc.pro/image/3/aa/c787ab6f7ee0be122ff9507ac876c.jpg)

---

原文 / Source: <https://hicc.pro/p/swift/swift-3-tokenize>
