随着Swift的推出,我一直试图让我的头脑绕过新语言
我是iOS开发人员,会NSString, NSInteger, NSDictionary
在应用程序中使用类型.我注意到在Apple的"The Swift Programming Language"电子书中,他们使用了Swift类型String, Int, Dictionary
我注意到Swift类型没有(或者命名不同)Foundation类型的一些功能.例如NSString
有一个length
属性.但我无法为Swift找到类似的String
.
我想知道,对于iOS应用程序,我还应该使用基础类型吗?
我正在尝试读取一个给定的文件NSURL
并将其加载到一个数组中,其中的项目由换行符分隔\n
.
这是我到目前为止的方式:
var possList: NSString? = NSString.stringWithContentsOfURL(filePath.URL) as? NSString
if var list = possList {
list = list.componentsSeparatedByString("\n") as NSString[]
return list
}
else {
//return empty list
}
Run Code Online (Sandbox Code Playgroud)
出于几个原因,我对此并不满意.一,我正在处理从几千字节到几百MB的文件.你可以想象,使用这么大的字符串是缓慢而笨拙的.其次,这会在执行时冻结UI - 再次,不好.
我已经考虑在一个单独的线程中运行此代码,但我一直遇到麻烦,此外,它仍然无法解决处理大字符串的问题.
我想做的是下面的伪代码:
var aStreamReader = new StreamReader(from_file_or_url)
while aStreamReader.hasNextLine == true {
currentline = aStreamReader.nextLine()
list.addItem(currentline)
}
Run Code Online (Sandbox Code Playgroud)
我如何在Swift中实现这一目标?
关于我正在阅读的文件的一些注意事项:所有文件都由短或(\n
或255个字符)字符串组成,由或者分隔\r\n
.文件的长度范围从~100行到超过5000万行.它们可能包含欧洲字符和/或带重音的字符.
如何测试NSString是否为空?或所有空格或零?用一个方法调用?
在以前版本的Swift中,我有以下代码.
func myfunc(mystr: String) {
if mystr.utf16Count >= 3 {
Run Code Online (Sandbox Code Playgroud)
随着最新版本的Swift 1.2,我现在收到以下错误.
'utf16Count' is unavailable: Take the count of a UTF-16 view instead, i.e. count(str.utf16)
Run Code Online (Sandbox Code Playgroud)
好的,所以我按如下方式更改了我的代码.
func myfunc(mystr: String) {
if count(mystr.utf16) >= 3 {
Run Code Online (Sandbox Code Playgroud)
但这不起作用.我现在得到以下错误消息.
'(String.UTF16View) -> _' is not identical to 'Int16'
Run Code Online (Sandbox Code Playgroud)
使用Swift 1.2获取字符串长度的正确方法是什么?
如何String
在macOS上获得'Swift3' 的长度?
这曾经在Swift2中工作:
if purchaseDateString.length == 0 {
purchaseDateString = "n/a"
}
Run Code Online (Sandbox Code Playgroud)
什么是Swift3等价于查找String的长度.
UPDATE
马丁指出,这个问题有答案.提到的问题有30个答案.但是,就我所知,它们都没有专门针对Swift3.我错了..
如何限制UITextField
to中的字符数10
,如果用户输入的字符数超过10
,则只记录前10个字符?
让我疯狂的一件事就是找到一件简单的事:Swift中的字符串长度.
不,你不能使用string.length
不,你不能使用string.characters.count
不,你不能使用string.count
唯一对我有用的是string.endIndex.然而,这对于简单的textField检查不起作用,例如
func textViewDidChange(textView: UITextView) {
if textView.text.endIndex > 20 {
setBorder(descriptionField, finished: true)
} else {
setBorder(descriptionField, finished: false)
}
}
Run Code Online (Sandbox Code Playgroud)
由于endIndex不是Int而且无法转换成.这整件事让我发疯,我不知道该怎么办.任何帮助,将不胜感激!