21. 面向协议编程、响应式编程
问:给出一个字符串,计算出里面数字的个数
var str = "1234test1234"
func numberCount(_ str: String) -> Int {
var count = 0
//方法一
for c in str {
if ("0"..."9").contains(c){
count = count + 1
}
}
return count
//方法二
for c in str where ("0"..."9").contains(c) {
count = count + 1
}
return count
//方法三
let tempStr = str.filter {
c in
return ("0"..."9").contains(c)
}
return tempStr.count
}
let result = numberCount(str)
print(result)//8
以上几种方法,都是自定义函数方法,哪用去哪写
既然这个功能是全局性的,可以写到扩展里面:
ar str = "1234test1234"
let result = str.numberCount
print(result)
//扩展
extension String {
//计算属性
var numberCount: Int {
var count = 0
for c in str where ("0"..."9").contains(c) {
count = count + 1
}
return count
}
}
这种方法,属性名没有特殊标识,有可能String里面有一个numberCount,会造成覆盖
因此,最好命名为xx_numberCount,这种好改
如果可以str.xx.numberCount这样调用更好,看着像是私有库里面的方法
var str = "1234test1234"
struct YZ {
var string: String
init(_ string: String) {
self.string = string
}
var numberCount: Int {
var count = 0
for c in str where ("0"..."9").contains(c) {
count = count + 1
}
return count
}
}
extension String {
var yz: YZ {
return YZ(self)
}
}
let result = str.

最低0.47元/天 解锁文章
1038

被折叠的 条评论
为什么被折叠?



