对于在Swift中对String调用NSString方法感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍swiftstringnsstring,并为您提供关于ios–如何将SwiftString
对于在Swift中对String调用NSString方法感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍swift string nsstring,并为您提供关于ios – 如何将Swift String连接到Objective C NSString?、NSString跟Swift String的区别和使用场景、Swift - String与NSString的区别,以及各自的使用场景、swift – 不能下标'[String:String]类型的值?’索引类型为’String’的有用信息。
本文目录一览:- 在Swift中对String调用NSString方法(swift string nsstring)
- ios – 如何将Swift String连接到Objective C NSString?
- NSString跟Swift String的区别和使用场景
- Swift - String与NSString的区别,以及各自的使用场景
- swift – 不能下标'[String:String]类型的值?’索引类型为’String’
在Swift中对String调用NSString方法(swift string nsstring)
苹果的Swift
文档指出
如果您正在Cocoa或Cocoa Touch中使用Foundation框架,则可以使用整个NSString API来调用您创建的任何String值
如果我有一个String对象,例如
var newString: String = "this is a string"
如何执行类似containsString
String var的NSString操作?
答案1
小编典典经过一些研究,看起来containsString
不是一个String
函数,但是可以通过桥接到来访问NSString
。
在苹果公司关于将Swift与Cocoa和Objective-
C结合使用的文档中,它说
Swift会在String类型和NSString类之间自动桥接。这意味着在任何使用NSString对象的地方,都可以改用Swift
String类型,并从这两种类型中受益
但是看来,只有NSString的某些功能可以访问而无需显式桥接。要桥接到NSString并使用其任何功能,可以使用以下方法:
//Example Swift String var var newString:String = "this is a string" //Bridging to NSString //1 (newString as NSString).containsString("string") //2 newString.bridgeToObjectiveC().containsString("string") //3 NSString(string: newString).containsString("string")
所有这三个工作。有趣的是,只有某些NSString
方法可用,Strings
而其他方法则需要显式桥接。这可能是随着Swift的发展而建立的。
ios – 如何将Swift String连接到Objective C NSString?
“Swift automatically bridges between the String type and the Nsstring class. This means that anywhere you use an Nsstring object,you can use a Swift String type instead and gain the benefits of both types—the String type’s interpolation and Swift-designed APIs and the Nsstring class’s broad functionality. For this reason,you should almost never need to use the Nsstring class directly in your own code. In fact,when Swift imports Objective-C APIs,it replaces all of the Nsstring types with String types. When your Objective-C code uses a Swift class,the importer replaces all of the String types with Nsstring in imported API.
要启用字符串桥接,只需导入基础“.
我做了这个…考虑:
import Foundation var str = "Hello World" var range = str.rangeOfString("e") // returns error: String does not contain member named: rangeOfString()
然而:
var str = "Hello World" as Nsstring var range = str.rangeOfString("e") // returns correct (2,1)
我错过了什么吗?
解决方法
var str = "Hello World"
创建一个Swift字符串,而不是Nsstring.要使其作为Nsstring工作,您应该在使用之前使用as操作符将其转换为Nsstring.
这不同于调用在Objective-C中编写的方法,并提供一个String而不是一个Nsstring作为参数.
NSString跟Swift String的区别和使用场景
当下Swift
项目已经越来越多,可能会经常见到 str as Nsstring
或者str as String
字符串在这两者之间的来回切换,因为有些操作用OC字符串比较方便,而有些操作则相反,熟练掌握这两种字符串的特点对项目的开发必然有利。本文是一些自己的理解,借鉴了官方文档,如有理解偏差之处也欢迎指点。
Nsstring和String的共同点
首先说下共同点,就是String保留了大部分Nsstring的api比如
.hasPrefix
.lowercaseString
.componentsSeparatedByString
.substringWithRange 等等
所以很多常规操作在开发中使用两者之一都是可以的,
Nsstring和String的共同点的区别
1.Nsstring
是引用类型。Swift String
是值类型。
var nsstring: Nsstring = Nsstring() var swiftString:String = String() var nsstring: Nsstring = "dsx" var swiftString:String = "dsx"
两者都可以使用自己的类名来直接进行初始化,下面的方法也是初始化,虽然写法相同,但是Nsstring的意思是初始化了一个指针指向了这个字符串,但Swift String的意思则是把字符串字面量赋值给变量。
2. Swift String字符串之间的拼接比Nsstring方便
2.1 Nsstring
需要用append
或者stringWithFormat
将两个字符串拼接
Nsstring *strA = @"My name"; Nsstring *strB = @" is dsx"; strA = [strA stringByAppendingString: strB];
2.2 而Swift String
只需要用 +
即可
var strA = "My name" var strB = " is dsx" strA = "My name" + " is dsx" strA = strA + strB println(strA)
在swift最开始的语法是允许字符串和字符之间 直接使用 “+” 拼接的,但是swift1.2以后就不能这么做了,字符串与字符直接只能用append衔接了。
2.3 Swift String
可以实现字符串遍历
SwiftString
可以实现遍历输出一个字符串内部的所有字符,这是Nsstring所做不到的,因为前者继承了CollectionType
协议(swift2后不再继承此协议,改成通过一个characters属性来提供一个字符的集合)
// swift1.2 for charater in "My name is dsx" { println(charater) } // swift2.0 for character in "My name is dsx".characters { print(character) }
swift的字符串更像是多个字符元素组合而成有序列的一个产物,像但不是集合类;如果把上面的“This is a book” 后面加上 as Nsstring 则会报如下错误:
Type 'Nsstring' does not conform to protocol 'SequenceType'
在swift2.0以后写as String 也会报上面错误,2.0将原来String继承的SequenceType和CollectionType协议都下沉到了String.CharacterView来继承,感觉苹果这么做的目的是为了减少资源浪费。
2.4 Swift String计算字符串长度的方法与Nsstring不同
var strA: String = "mc梦" var strB: Nsstring = "mc梦" print(strA.lengthOfBytesUsingEncoding(NSUTF8StringEncoding)) // 5 print(strA.characters.count)) // 3 print(strB.length); // 3
Nsstring
直接使用 字符串.length
就可以获得字符串的长度,但是String敲.length只能敲出 .lengthOfBytesUsingEncoding(NSUTF8StringEncoding)
这么算汉字的存储空间就是英文的3倍。 swift真正的类似于.length
的方法就是取出characters
属性(数组)然后.count
2.5 Swift String比较字符串相等的方式与Nsstring不同
let strA: Nsstring = "" let strB: Nsstring = "" let strC: Nsstring = "dsx" let strD: Nsstring = "dsx" // Nsstring 字符串相等 if(strA.isEqualToString(strB as String)){ print("yes"); } // String的相等 if (strC == strD){ print("yes"); }
Nsstring
有一个方法isEqualToString
方法用来判断两个字符串是否完全相等,String没有这个方法,但是因为String
是值类型所以可以直接用 ==
判断是否完全相等。
2.6 Nsstring可以同基本数据类型见转化
var strA: Nsstring = "12306" var strB: Nsstring = "0.618" var numOfInt = strA.integerValue; var numOfDouble = strB.doubleValue;
这个功能Swift没有,所以在json解析或字典转模型时可能会使用Nsstring比较方便。
Swift String可以通过isEmpty
属性来判断该字符串是否为空
var emptyStr = "" if emptyStr.isEmpty { // Nsstring没有判断空的方法 print("It is empty") }
这个也是swift String独有的一个属性。一般Nsstring想判断字符串是否为空都是需要看.length
是否>0。 判断Nsstring == nil
这个方法现在已经不让用了,会报错
Binary operator ‘==’ cannot be applied to operands of type ‘Nsstring’ and ‘NilLiteralConvertible’
2.7 Swift String独有的字符串插入字符功能
var strA:String = "My name is dx" strA.insert("s",atIndex: strA.characters.indexOf("x")!); print(strA) // My name is dsx
这个方法仅仅可以插入单个字符不能插字符串,如果里面写成ss
就会报错Cannot convert value of type 'String' to expected argument type 'Character'
如果你不是在董铂然博客园看到本文,请点击查看原文。
Nsstring是一个指针不能进行此操作。并且String也拥有Nsstring的subStringFromIndex 或 ToIndex的功能。
总结:
String的总体功能来看还是比Nsstring要更加强大,毕竟Swift语法里的正规军。两者有很多的不同,甚至他有你没有的功能说到底都是一个是值类型,一个是引用类型引起的。swift2.0之后扩展了一些属性,这也让String的很多方法的调用方式发生了巨大改变。 还有一些不同正在探索中,希望本文能对读者有所帮助,转载必须注明转载和原文链接。
Swift - String与NSString的区别,以及各自的使用场景
String是Swift里新增加的类型,它与原来的Nsstring可以很方便地互相转换。但在实际开发中,我们该如何选择?
1
2
3
4
|
let
words =
"Hangge.com"
for
i
in
words{
print
(i)
//Hangge.com
}
|
2,要使用Nsstring的情况
1
2
3
4
|
let
words =
"Hangge.com"
if
(words
as
Nsstring
).containsstring(
"ge"
){
print
(
"Yes"
)
//YES
}
|
"co"
) !=
nil
{
(2)String与Range配合比较麻烦,比如下面截取字符串的一部分,分别用转换成Nsstring再截取和直接使用String截取做演示,大家可以自行比较。(这个也只是麻烦些,其实问题也不大)
//先转换成Nsstring
rangeStr1 = (words
).substringWithRange(
NSMakeRange
(4,2))
//ge
//不转换
index = words.startIndex.advancedBy(4)
index2 = words.startIndex.advancedBy(6)
range =
Range
<
String
.
Index
>(start: index,end: index2)
rangeStr2 = words.substringWithRange(range)
//ge
|
原文出自: www.hangge.com 转载请保留原文链接: http://www.hangge.com/blog/cache/detail_798.html
swift – 不能下标'[String:String]类型的值?’索引类型为’String’
let orch = NSUserDefaults().dictionaryForKey("orch_array")?[orchId] as? [String:String] orch[appleId]
orch [appleId]行上的错误:
Cannot subscript a value of type ‘[String : String]?’ with an index
of type ‘String’
为什么?
问题2:
let orch = NSUserDefaults().dictionaryForKey("orch_array")?[orchId] as! [String:[String:String]] orch[appleId] = ["type":"fuji"]
错误:“无法分配此表达式的结果”
This form of the operator will always return an optional value,and the value will be nil if the downcast was not possible. This enables you to check for a successful downcast.
因此,orch的类型为[String:String]?.要解决这个问题,您需要:
用作!如果你肯定知道返回的类型是[String:String]:
// You should check to see if a value exists for `orch_array` first. if let dict: AnyObject = NSUserDefaults().dictionaryForKey("orch_array")?[orchId] { // Then force downcast. let orch = dict as! [String: String] orch[appleId] // No error }
2.使用可选绑定检查orch是否为零:
if let orch = NSUserDefaults().dictionaryForKey("orch_array")?[orchId] as? [String: String] { orch[appleId] // No error }
希望有所帮助.
今天的关于在Swift中对String调用NSString方法和swift string nsstring的分享已经结束,谢谢您的关注,如果想了解更多关于ios – 如何将Swift String连接到Objective C NSString?、NSString跟Swift String的区别和使用场景、Swift - String与NSString的区别,以及各自的使用场景、swift – 不能下标'[String:String]类型的值?’索引类型为’String’的相关知识,请在本站进行查询。
本文标签: