美文网首页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 开发中重复常量的处理

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