美文网首页Swift移动开发IOS开发
iOS+Swift 开发中重复常量的处理

iOS+Swift 开发中重复常量的处理

作者: windgo | 来源:发表于2015-08-16 16:57 被阅读494次

iOS+Swift 开发中重复常量的处理

提取可复用代码,避免相同或者十分类似的代码分散在项目中多个地方,是让代码变得更简洁的一种方法.

将可复用的代码,抽象成常量,枚举,方法,类之后,在将来需要修改,调整代码的时候,只在对应的方法里修改就可以了,不必再到处修改.

有人可能会说, 为什么不一开始就将可能重用的代码, 封装成可复用的代码呢? 我觉得是思路问题和能力问题. 在软件开发上, 大概有两种形成设计的过程, 一种是先设计, 然后依据设计编写代码. 另一种, 是写出代码之后, 检查不合理的地方, 进行重构形成设计. 前一种对能力和经验有更高的要求, 后一种可能更平民一些, 可操作性更高, 更容易上手. 本文中主要是在后一种情形之下发生的.

找到重复出现的字符串值,并定义成一个全局的常量,是其中的一項工作.

将重复出现的逻辑代码,抽象成方法,抽象成类是是其他的工作,本文不涉及.

例如:对于需要显示价格的地方,要求在app内都显示为“80¥”,那么人民币符号“¥”可能会出现在代码里的各种地方.“¥”这个符号会出现在各种地方,labelA.text=“(product.price)“+”¥”.将来有一天,老板一拍板,说为什么显示”80¥”,这不是明显的崇洋媚外嘛,应该展示成“80元”嘛.如果你在100个地方,直接这么编写了代码,那么你就可能需要修改100处地方,漏掉一个地方,就是一个bug.这时候, 我们可以将”¥”这个常量, 封装到类里.

extension String {
    static var PriceChar:String {
        return ”¥”
    }
}

…
labelA.text= “\(product.price)“+String.PriceChar
…
labelB.text= “\(productB.price)“+String.PriceChar

这样, 老板说改成”元”, 那么我们只需要修改一个地方

    static var PriceChar:String {
        return ”元”
    }

就算想改成”$”, 也是分分钟搞定.

    static var PriceChar:String {
        return ”$”
    }

对于已经存在的代码, 怎么查找重复出现的常量是(例如"¥")是一个需要借助工具的工作.比较费力的一种方法,是翻阅代码,发现一个字符串值后,利用ide或者编辑器在整个项目里搜索.

这里利用脚本语言来实现.

作为一个程序员很有用的一个技术就是重复工作,用代码来做,一般来说,用脚本语言更快捷一些.

脚本思路:

利用一个字典, 记录所有常量出现的个数
遍历所有文件, 对于每一个文件, 查找符合”xxx”格式的词, 找到后, 在字典的计数里加1
输出结果

脚本:

# encoding: UTF-8
#/usr/bin/python
import os
import sys
import re
import operator  

# 词频字典
wordDict={}

# 常量的正则表达式
p=re.compile('"[^"]*"')

# 统计文件中常量的出现次数
def CountFile(f):
     # 不是源文件, 不进行处理
    if f.find(".swift")==-1:
        return
    
    #打开文件
    f = open(f, "r")
    #处理文件中的每一行
    for line in f.read().split('\n'):
        strList=p.findall(line)
        for strConst in strList:
            if wordDict.has_key(strConst):
                wordDict[strConst] = wordDict[strConst]+1
            else:
                wordDict[strConst]=1
    #关闭文件    
    f.close()

# 遍历目录, 统计词频
def CountDir(dirname):
    for f in os.listdir(dirname):
        fa = os.path.join(dirname, f)
        if os.path.isdir(fa):
            CountDir(fa)
        else:
            CountFile(fa)

# 遍历从命令行传入的目录
CountDir(sys.argv[1])

sortedDict=sorted(wordDict.iteritems(), key=operator.itemgetter(1), reverse=True)

for t in sortedDict:
    print t

相关文章

  • iOS+Swift 开发中重复常量的处理

    iOS+Swift 开发中重复常量的处理 提取可复用代码,避免相同或者十分类似的代码分散在项目中多个地方,是让代码...

  • Android 注解检测、限制操作

    Android 开发中资源常量限制注解: Android开发中权限申请提示注解: 数值常量注解:

  • [Swift]-基本语法

    变量与常量 声明常量与变量 声明常量或变量时进行类型标注 开发中尽量使用常量,因为常量运行效率跟高。 命名规则 区...

  • 常量池

    常量池,为了方便重复创建相同常量值的对象而出现的。常量池相当于一个内存空间,存在于方法中。 按照代码顺序,先在常量...

  • Golang常用操作

    总结Golang在实际开发中的常用操作,以便快速查找 处理错误 包装一个错误处理函数,避免大量重复if err!=...

  • 玩转编程语言:构建自定义代码生成器

    在真实的软件开发过程中,无论使用何种编程开发语言,都不可避免的会遇到代码重复的问题。如何处理重复的问题,可以选择情...

  • Android中动态申请权限及其结果回调

    Android中对权限的管理越来越严格,如果在开发中自己处理权限,那么将是一件很麻烦的事情,开发中我们可以不重复造...

  • Axios如何取消重复请求

    在实际开发中,我们需要对用户发起的重复请求进行拦截处理,比如用户快速点击提交按钮。 对于重复的 get 请求,会导...

  • iOS开发 - 「Swift 学习」Swift语言标识符命名规则

    Swift中变量、常量、方法、函数、枚举、结构体、类、协议等命名规则: 开发中需要对 变量、常量、方法、函数、枚举...

  • 多用类型常量, 少用#define预处理命令

    在开发中我们经常要定义常量,比如设定一个动画执行的时间,一般我们会这样写: 这条预处理命令会把源代码中的ANIMA...

网友评论

本文标题:iOS+Swift 开发中重复常量的处理

本文链接:https://www.haomeiwen.com/subject/eabwqttx.html