当前位置: 首页 > web >正文

【iOS(swift)笔记-10】利用类的继承来实现不同地区语言的显示

XCode项目原生开发有自带的可区分语言的功能体系,建议采用原生开发,此处利用类的继承来实现不同地区语言的显示是为了方便,而且在unity游戏开发中采用此法也挺灵活适用。

// 定义一个语言控制类

class LanguageController {

    // 根据系统切换

    static func CRL() -> CN? {

        /*

         print(Locale.current.language.languageCode)

         print(Locale.current.region?.identifier)

         print(Locale.current.identifier)

         打印结果

         简体中文

         Optional(zh)

         Optional("CN")

         zh_CN

         英文

         Optional(en)

         Optional("CN")

         en_CN

         香港

         Optional(zh)

         Optional("CN")

         zh_HK@rg=cnzzzz

         澳门

         Optional(zh)

         Optional("CN")

         zh_MO@rg=cnzzzz

         台湾和其他国家地区

         Optional(zh)

         Optional("CN")

         zh-Hant_CN

         

         */

        

        if let xxx = CRL_ {

            // 判断是否已经获取过当前系统语言,而不是每次创建实例都进行判断。

//            print("已获取过了")

        }

        else{

//            print("未获取过")

            let languageCode = Locale.current.language.languageCode

            switch languageCode {

            case "zh":

                let identifier = Locale.current.identifier

                if "zh_CN" == identifier {

                    // 大陆用简体

                    CRL_ = CN()

                }

                else {

                    // 其他用繁体

                    CRL_ = HK()

                }

                break

            case "en":

                CRL_ = EN()

                break

            default:

                CRL_ = EN()

                break

            }

        }

        return CRL_

    }

    

    private static var CRL_:CN?

    

    // 简体中文

    public class CN {

        public var txt:String = "简体中文"

    }

    

    // 繁体中文—香港

    private class HK : CN {

        override init() {

            super.init() // 调用父类的初始化器

            // 这里可以修改或基于父类的属性进行操作

            self.txt = "繁體中文"

        }

    }

    // 英文

    private class EN : CN {

       override init() {

           super.init() // 调用父类的初始化器

           // 这里可以修改或基于父类的属性进行操作

           self.txt = "English"

       }

   }

}

调用方法

print(LanguageController.CRL()?.txt)

http://www.xdnf.cn/news/7881.html

相关文章:

  • Serverless爬虫架构揭秘:动态IP、冷启动与成本优化
  • 【嵌入式人工智能产品开发实战】(二十二)—— 政安晨:改造小智AI开发智能体硬件(案例:移植PowerManager后麦克风不工作)
  • 栈和队列的实现
  • 如何在PyCharm2025中设置conda的多个Python版本
  • 如何利用 Conda 安装 Pytorch 教程 ?
  • 深入解析AI中的Prompt工程:从理论到实践
  • 网络世界的“变色龙“:动态IP如何重构你的数据旅程?
  • 【iOS】分类、扩展、关联对象
  • OneDrive登录,账号跳转问题
  • 【Java高阶面经:数据库篇】13. MySQL 并发控制秘籍:MVCC 协议与隔离级别深度解析
  • 在实际网络部署中,静态路由的优先级通常高于RIP
  • 缺乏经验的 PCB 过孔建模方法
  • Java Collection(集合) 接口
  • Xilinx 7Series\UltraScale FPGA MultiBoot Fallback
  • bi工具是什么意思?bi工具的主要功能有哪些?
  • Spark SQL 原理与开发
  • transformer归一化层优化:深度解读 RMSNorm (Root Mean Square Layer Normalization,均方根层归一化)
  • Git 提交大文件 this exceeds GitHub‘s file size limit of 100.00 MB
  • MCP和 AI agent 有什么区别和联系
  • 什么是 Agent 的 Message
  • 现代数据库系统的九大类别解析
  • Socket编程——TCP
  • 振动分析 - 献个宝
  • AI人工智能——Matplotlib绘制各种数据可视化图表的基础方法
  • ThinkPHP 根据路由文件获取路由列表
  • Python60日基础学习打卡D32
  • 如何使用两块硬盘作为 Ubuntu24 的系统盘,实现坏掉一块不影响系统运行。
  • 变电站综合自动化系统
  • 多技术栈 iOS 项目的性能调试实战:从 Flutter 到 Unity(含 KeyMob 工具实测)
  • WPF MVVM Community Toolkit. Mvvm 社区框架