2018年6月30日 星期六

NSRange vs. Range and NSString vs. String



NSRange 是 Objective-C 的 Range, Range 則是 Swift 的 Range,是不同的結構。

但是 iOS API 內因為歷史因素都是給 NSRange ,所以通常要 cast 一下,例如:

```swift
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    let oldText = textField.text!
    let stringRange = Range(range, in: oldText)!
    let newText = oldText.replacingCharacters(in: stringRange, with: string)

    if newText.isEmpty {
      doneBarButton.isEnabled = false
    } else {
      doneBarButton.isEnabled = true
    }
   
    return true
  }
```

至於String 則是會 bridge 到 NSString,所以都有一樣的 API


沒有留言:

張貼留言