python开发者,学习swift与dart哪个更简单

### Python 开发者学习 Swift 和 Dart 的难易程度比较 #### 语言设计与语法复杂性 Python 是一种以简洁和可读性著称的编程语言,其语法强调直观性和一致性。对于 Python 开发者来说,Dart 的语法可能更容易上手,因为 Dart 的语法风格更接近于 Java 和 JavaScript,而这些语言在控制结构、数据类型以及面向对象编程方面与 Python 有较多相似之处[^1]。此外,Dart 提供了类似于 Python 的动态类型支持,尽管它实际上是一种静态类型语言,这使得 Python 开发者能够快速适应 Dart 的开发环境。 相比之下,Swift 的语法虽然现代化且功能强大,但其一些特性(如闭包、泛型和模式匹配)对初学者来说可能显得较为复杂。Swift 的类型系统更加严格,并且引入了许多 Objective-C 中没有的概念,这可能会增加 Python 开发者的学习曲线[^2]。 #### 工具链与生态系统 Dart 拥有 Flutter 这一强大的跨平台框架,为开发者提供了丰富的工具支持,例如热重载功能可以让开发者即时看到代码修改的效果。这种高效的开发体验对于习惯了 REPL(Read-Eval-Print Loop)交互式开发的 Python 开发者来说非常友好[^3]。 Swift 的主要开发工具是 Xcode,它提供了全面的集成开发环境,包括调试器、界面构建器等。然而,Xcode 主要针对 macOS 用户优化,这可能限制了某些只使用 Windows 或 Linux 系统的 Python 开发者的接入便利性[^2]。 #### 跨平台能力 从跨平台的角度来看,Dart 明显占据优势。通过 Flutter,Dart 可以轻松实现 iOS 和 Android 平台上的统一代码库。这对于已经习惯于 Python 的多平台兼容性的开发者来说是一个重要的吸引力。而 Swift 尽管近年来也在尝试扩展到其他平台(如 Linux),但在实际应用中仍主要局限于苹果生态系统内[^1]。 #### 社区资源与文档支持 Python 开发者通常受益于庞大的社区资源和详尽的技术文档。在这方面,Dart 的社区规模虽不及 Python,但由于 Flutter 的流行,其生态系统正在快速扩展。同时,Google 官方提供的详细教程和技术支持也为新用户降低了入门门槛。Swift 则拥有一个活跃的苹果开发者社区,相关的技术资料也非常丰富,但对于非苹果生态系统的开发者来说,获取这些资源可能会稍显不便[^2]。 ```python # Python 示例:简单的函数定义 def greet(name): return f"Hello, {name}!" print(greet("World")) ``` ```dart // Dart 示例:类似的函数定义 String greet(String name) { return "Hello, $name!"; } void main() { print(greet("World")); } ``` ```swift // Swift 示例:对应的函数实现 func greet(_ name: String) -> String { return "Hello, \(name)!" } print(greet("World")) ``` ### 结论 总体而言,对于 Python 开发者来说,学习 Dart 可能会比学习 Swift 更加容易。Dart 的语法风格与 Python 更加接近,同时其工具链和跨平台能力也更适合那些希望快速上手移动应用开发的开发者。不过,如果目标是专注于苹果生态系统内的开发工作,则 Swift 依然是不可忽视的选择。

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

Python内容推荐

你好Python、Java、C、C、JS、Go、Swift、Rust、Ruby、Kotlin、TS、Dart英文翻译版_

你好Python、Java、C、C、JS、Go、Swift、Rust、Ruby、Kotlin、TS、Dart英文翻译版_

你好Python、Java、C、C、JS、Go、Swift、Rust、Ruby、Kotlin、TS、Dart英文翻译版_《Hello 算法》:动画图解、一键运行的数据结构与算法教程。支持 Python, Java, C++, C, C#, JS, Go, Swift, Rust, Ruby, Kotlin, TS, Dart 代码。简体版和繁体版同步更新,English version in translation.zip

【零基础学算法】 超详细动画讲解支持 Java, C++, Python, Go, JS, TS, C#, Swift等语言)

【零基础学算法】 超详细动画讲解支持 Java, C++, Python, Go, JS, TS, C#, Swift等语言)

数据结构与算法 内容结构 复杂度分析:数据结构和算法的评价维度与方法。时间复杂度、空间复杂度的推算方法、常见类型、示例等。 数据结构:基本数据类型,数据结构的分类方法。数组、链表、栈、队列、哈希表、树、堆、图等数据结构的定义、优缺点、常用操作、常见类型、典型应用、实现方法等。 算法:搜索、排序、分治、回溯、动态规划、贪心等算法的定义、优缺点、效率、应用场景、解题步骤、示例题目等。 相较于文字,视频和图片具有更高的信息密度和结构化程度,更易于理解。在本书中,重点和难点知识将主要通过动画和图解形式展示,而文字则作为动画和图片的解释与补充。 如果你在阅读本书时,发现某段内容提供了图 0-2 所示的动画或图解,请以图为主、以文字为辅,综合两者来理解内容。 本算法是动画图解、一键运行的数据结构与算法教程,支持 Java, C++, Python, Go, JS, TS, C#, Swift, Rust, Dart, Zig 等语言

Languages:您可以在这里学习不同的编程语言

Languages:您可以在这里学习不同的编程语言

语言能力 您可以在这里学习不同的编程语言

《Hello 算法》:动画图解、一键运行的数据结构与算法教程

《Hello 算法》:动画图解、一键运行的数据结构与算法教程

《Hello 算法》:动画图解、一键运行的数据结构与算法教程,支持 Python, C++, Java, C#, Go, Swift, JS, TS, Dart, Rust, C, Zig 等语言

Flutter插件开发框架-xfiat-fluttify-跨平台移动应用开发工具-提供Android与iOS原生代码集成支持-简化Flutter与原生平台交互流程-包含示例代码与A.zip

Flutter插件开发框架-xfiat-fluttify-跨平台移动应用开发工具-提供Android与iOS原生代码集成支持-简化Flutter与原生平台交互流程-包含示例代码与A.zip

c Flutter插件开发框架_xfiat_fluttify_跨平台移动应用开发工具_提供Android与iOS原生代码集成支持_简化Flutter与原生平台交互流程_包含示例代码与A.zipFlutter插件开发框架_xfiat_fluttify_跨平台移动应用开发工具_提供Android与iOS原生代码集成支持_简化Flutter与原生平台交互流程_包含示例代码与A.zip

用19种编程语言写HelloWorld.pdf

用19种编程语言写HelloWorld.pdf

用19种编程语言写HelloWorld.pdf

计算机编程语言的发展趋势.ppt

计算机编程语言的发展趋势.ppt

计算机编程语言的发展趋势.ppt

IT书单.zip

IT书单.zip

IT书单.zip

计算机程序设计语言的发展史及现状参照.pdf

计算机程序设计语言的发展史及现状参照.pdf

计算机程序设计语言的发展史及现状参照.pdf

常见的三十三种代码

常见的三十三种代码

常见的三十三种代码

基于Dart语言的Flutter框架开发源码与多语言融合应用设计指南

基于Dart语言的Flutter框架开发源码与多语言融合应用设计指南

该项目为基于Dart语言的Flutter框架开发的多语言融合应用设计源码,包含2552个文件,其中包括1524个Dart源代码文件、248个PNG图片文件、118个模板文件、59个资源文件、57个YAML配置文件、52个Gradle构建脚本文件、44个Markdown文件、37个M文件和36个Storyboard设计文件。该项目支持多种编程语言,包括Dart、MATLAB、C、Java、Shell、HTML、Python和Swift,旨在帮助开发者快速构建美观的移动应用。

基于Flutter的Dart语言新闻客户端设计源码学习笔记

基于Flutter的Dart语言新闻客户端设计源码学习笔记

该项目为基于Flutter框架,使用Dart语言开发的新闻客户端源码学习笔记,总计包含256个文件,涵盖87个PNG图片、68个Dart源码文件、8个XML、XCconfig、H、Plist配置文件以及少量其他类型文件,如Gitignore、JSON、Swift、C++、HTML、Python和Kotlin代码。通过学习猫哥的新闻客户端,深入了解Flutter在移动应用开发中的应用与实现细节。

Dart语言入门

Dart语言入门

Dart是... 静态类型(Dart专用的“动态”类型除外) 提前或按时编译 面向对象,所以一切都是对象。 函数,数据类型,null等 好,那么什么是强类型语言? 在编译时知道变量的类型吗? 示例语言包括C ++,Java和Swift 那时我听说过这些动态类型化的语言是什么? 在这些变量中,变量类型仅在运行时才知道 示例语言包括Python,Ruby和JavaScript DART中可用的数据类型是什么? Int,Double,String,Bool和Dynamic 动态数据类型可以在运行时将其值更改为另一种类型 Dart包是... 自动从dart:core包导入 如何处理输入/输出 stdout.writeln捕获用户输入 stdin.readLineSync返回捕获的输入 $varname允许我们插值字符串 我该如何写评论? //用于内联评论 /* */用于多行注释

动画图解的数据结构与算法教程

动画图解的数据结构与算法教程

一个动画图解的数据结构与算法教程,支持多种编程语言,如 Java、C++、Python、Go、JS、TS、C#、Swift、Rust、Dart、Zig 等。通过可视化的方式,这个项目帮助学习者更轻松地理解和学习各种数据结构与算法。

基于Dart语言的随份子往来账簿设计源码及跨平台实现方案

基于Dart语言的随份子往来账簿设计源码及跨平台实现方案

该项目为基于Dart语言的随份子往来账簿设计,提供完整的源代码及跨平台实现方案。项目包含112个文件,涵盖45个PNG图片、17个Dart源代码文件、5个XML文件、4个plist文件、3个gitignore和gradle文件、3个json文件以及少量CSS、HTML、C、Kotlin、Swift、Python和JavaScript文件,旨在为用户提供便捷的随份子账务管理工具,支持多种平台运行。

Infinite-Blue-1042:我目前正在研究PyBlock模块及其其他功能,例如其图形,以及目前以EasyEda脚本编写并转换为Perl和Perl6(Raku)格式的Infinity Blue和Blue Core Computer。 我还正在开发编程语言V,V#和V ++,以及Z-5056952体系结构。 我目前也在学习Java和Dart编程语言,我想与他们一起开发快速的移动应用程序并创建有用的应用程序。 我在Xcode中使用Swift和SwiftUI为Mac,iPhone和Apple Watch

Infinite-Blue-1042:我目前正在研究PyBlock模块及其其他功能,例如其图形,以及目前以EasyEda脚本编写并转换为Perl和Perl6(Raku)格式的Infinity Blue和Blue Core Computer。 我还正在开发编程语言V,V#和V ++,以及Z-5056952体系结构。 我目前也在学习Java和Dart编程语言,我想与他们一起开发快速的移动应用程序并创建有用的应用程序。 我在Xcode中使用Swift和SwiftUI为Mac,iPhone和Apple Watch

你好呀! 我是Python Software Devolper。 :waving_hand: 我目前正在研究PyBlock模块及其其他功能,例如其图形,以及目前以EasyEda脚本编写并转换为Perl和Perl6(Raku)格式的Infinity Blue和Blue Core Computer。 我还正在开发编程语言V,V ++和V#,以及Z-5056952体系结构。 我目前也在学习Java和Dart编程语言,我想与他们一起开发快速的移动应用程序并创建有用的应用程序。 我在Xcode中使用Swift和SwiftUI为Mac,iPhone和Apple Watch开发IOS应用程序。 而且,我还在Android Studio上为Google制造的Android OS中的应用程序编程。 我希望在Python项目(例如开源模块和应用程序)上进行协作。

基于Flutter的简单密码记录程序设计源码

基于Flutter的简单密码记录程序设计源码

该项目为基于Flutter的简易密码管理应用,源码包含187个文件,涵盖54个Dart代码文件、32个PNG图片资源、8个iOS配置文件、7个XML配置文件、7个属性列表文件、6个Swift代码文件、以及其他少量C/C++、Kotlin、Python等语言的辅助文件。程序旨在提供便捷的密码存储与访问功能。

动画图解、一键运行的数据结构与算法教程

动画图解、一键运行的数据结构与算法教程

《Hello 算法》:动画图解、一键运行的数据结构与算法教程。支持简中、繁中、English、日本語,提供 Python, Java, C++, C, C#, JS, Go, Swift, Rust, Ruby, Kotlin, TS, Dart 等代码实现

抽丝剥茧App混合开发进阶课视频课程下载整理.zip

抽丝剥茧App混合开发进阶课视频课程下载整理.zip

抽丝剥茧App混合开发进阶课【视频课程】下载整理.zip含下载地址可存云盘

2025编程语言预测[项目代码]

2025编程语言预测[项目代码]

根据开发者社区活跃度、企业采用率和技术生态发展等核心指标,结合人工智能、云计算和新兴技术领域的演进方向,预测2025年主流编程语言排名。Python预计持续领跑AI/ML领域,JavaScript/TypeScript作为全栈开发首选,Rust因内存安全特性在嵌入式与区块链领域增速显著。Go语言在云原生基础设施中占据核心地位,Java仍是企业级应用基石。C#、Kotlin、Swift、Dart和Zig等语言在各自领域均有显著增长。技术趋势观察显示,AI相关语言年增长率为25%,云原生语言增长18%,传统企业语言则呈现下降趋势。新兴语言如量子编程语言可能在未来重塑格局,建议开发者关注Rust和TypeScript的生态扩展。

最新推荐最新推荐

recommend-type

MS-TCN-TiDE 多尺度时序融合模型及周尺度电力负荷预测方法研究(Python代码实现)

内容概要:本文提出了一种基于MS-TCN-TiDE的多尺度时序融合模型,用于解决周尺度电力负荷预测问题。该模型创新性地融合了多尺度时序卷积网络(MS-TCN)与时间深度编码器(TiDE),通过多层次膨胀卷积结构有效捕捉电力负荷序列中的局部波动与长期趋势等多尺度时序特征,并采用稠密编码器架构深度融合历史负荷、气象条件、日历信息等多源异构数据。模型支持直接多步预测,避免了传统递归预测带来的累积误差。研究详细阐述了模型的整体架构设计、输入输出序列处理方式、特征工程方法及优化训练策略,并基于真实电力数据集完成了完整的Python代码实现与实验验证。结果表明,该模型在中长期负荷预测任务中相较ARIMA、LSTM、TCN等基准模型展现出更优越的预测精度与鲁棒性,尤其在应对负荷剧烈波动场景时表现突出。; 适合人群:具备一定Python编程基础和深度学习背景的研究生、科研人员及电力系统领域从事负荷预测、能源管理相关工作的工程师。; 使用场景及目标:①应用于电力系统调度、能源管理系统、电网规划等领域的中长期负荷预测任务,为电力供需平衡与运行决策提供数据支持;②为研究者提供一个结构清晰、代码可复现的先进负荷预测模型框架,促进时序深度学习模型在能源预测领域的应用、改进与学术交流; 阅读建议:建议读者结合提供的完整Python代码进行实践操作,深入理解MS-TCN的层级扩张卷积机制与TiDE的稠密编码解码结构的设计精髓,并可通过更换不同的数据集、调整模型超参数或引入新的特征变量,进一步探索模型的泛化能力与优化空间。
recommend-type

RÓÑSCINature»ÍİSCI¿Ñ»Í-¶Ê¼µÉ´ROCÇÏ

RÓÑSCINature»ÍİSCI¿Ñ»Í--¶Ê¼µÉ´ROCÇÏ
recommend-type

微分博弈论与机器学习-下载即用.zip

代码下载链接: https://pan.quark.cn/s/83b97866b3f0 极具价值的微分博弈领域初步学习资源,浙江大学博士研究论文
recommend-type

如何提升高校技术转移服务能力,助力成果高效转化?.docx

如何提升高校技术转移服务能力,助力成果高效转化?
recommend-type

高校科研处如何高效对接企业技术需求,提升成果转化率?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。
recommend-type

学生成绩管理系统C++课程设计与实践

资源摘要信息:"学生成绩信息管理系统-C++(1).doc" 1. 系统需求分析与设计 在进行学生成绩信息管理系统开发前,首先需要进行系统需求分析,这是确定系统开发目标与范围的过程。需求分析应包括数据需求和功能需求两个方面。 - 数据需求分析: - 学生成绩信息:需要收集学生的姓名、学号、课程成绩等数据。 - 数据类型和长度:明确每个数据项的数据类型(如字符串、整型等)和长度,例如学号可能是字符串类型且长度为一定值。 - 描述:详细描述每个数据项的意义,以确保系统能够准确处理。 - 功能需求分析: - 列出功能列表:用户界面应提供清晰的操作指引,列出所有可用功能。 - 查询学生成绩:系统应能通过学号或姓名查询学生的成绩信息。 - 增加学生成绩信息:允许用户添加未保存的学生成绩信息。 - 删除学生成绩信息:能够通过学号或姓名删除已经保存的成绩信息。 - 修改学生成绩信息:通过学号或姓名修改已有的成绩记录。 - 退出程序:提供安全退出程序的选项,并确保所有修改都已保存。 2. 系统设计 系统设计阶段主要完成内存数据结构设计、数据文件设计、代码设计、输入输出设计、用户界面设计和处理过程设计。 - 内存数据结构设计: - 使用链表结构组织内存中的数据,便于动态增删查改操作。 - 数据文件设计: - 选择文本文件存储数据,便于查看和编辑。 - 代码设计: - 根据功能需求,编写相应的函数和模块。 - 输入输出设计: - 设计简洁明了的输入输出提示信息和操作流程。 - 用户界面设计: - 用户界面应为字符界面,方便在命令行环境下使用。 - 处理过程设计: - 设计数据处理流程,确保每个操作都有明确的处理逻辑。 3. 系统实现与测试 实现阶段需要根据设计阶段的成果编写程序代码,并进行系统测试。 - 程序编写: - 完成系统设计中所有功能的程序代码编写。 - 系统测试: - 设计测试用例,通过测试用例上机测试系统。 - 记录测试方法和测试结果,确保系统稳定可靠。 4. 设计报告撰写 最后,根据系统开发的各个阶段,撰写详细的设计报告。 - 系统描述:包括问题说明、数据需求和功能需求。 - 系统设计:详细记录内存数据结构设计、数据文件设计、代码设计、输入/输出设计、用户界面设计、处理过程设计。 - 系统测试:包括测试用例描述、测试方法和测试结果。 - 设计特点、不足、收获和体会:反思整个开发过程,总结经验和教训。 时间安排: - 第19周(7月12日至7月16日)完成项目。 - 7月9日8:00到计算机学院实验中心(三楼)提交程序和课程设计报告。 指导教师和系主任(或责任教师)需要在文档上签名确认。 系统需求分析: - 使用表格记录系统需求分析的结果,包括数据项、数据类型、数据长度和描述。 - 分析数据项如学生成绩信息、状态器、链表节点等,确定其属性和行为。 以上就是文档中提到的学生成绩信息管理系统开发的关键知识点。开发此类系统需要熟练掌握C++编程基础,了解面向对象的程序设计思想,以及熟悉文件操作和链表等数据结构的应用。此外,良好的软件开发流程意识、测试意识和文档撰写能力也是必不可少的。
recommend-type

别再手动拖拽了!用Lumerical脚本批量创建FDTD仿真结构(附完整代码)

# 告别低效建模:Lumerical脚本自动化实战指南 在光子学仿真领域,时间就是科研生命线。当同行还在GUI界面里反复点击菜单时,你已经用脚本批量生成了20组参数化结构——这不是未来场景,而是每位FDTD用户都应该掌握的基础生产力革命。本文将彻底改变你与Lumerical的交互方式,从手动拖拽的农耕时代,跃迁到自动化建模的工业文明。 ## 1. 为何脚本建模是必然选择 2019年Nature Photonics的一项研究显示,科研工作者在仿真工具上平均浪费37%的时间在重复性操作上。对于需要参数扫描的纳米光学结构设计,这个数字可能更高。手动创建10个不同尺寸的纳米柱阵列意味着: -
recommend-type

Java邮件解析任务中,如何安全高效地提取HTML邮件内容并避免硬编码、资源泄漏和类型转换异常?

<think>我们被要求优化一段Java代码,该代码用于处理邮件(特别是来自特定发件人的构建通知邮件)。代码的主要问题包括: 1. 重复获取邮件内容:在检查MIME类型后,多次调用`msg[i].getContent()`,这可能导致性能问题或流关闭异常。 2. 类型转换问题:直接将邮件内容转换为`Multipart`而不进行类型检查,可能引发`ClassCastException`。 3. 代码结构问题:逻辑嵌套过深,可读性差,且存在重复代码(如插入邮件详情的操作在两个地方都有)。 4. 硬编码和魔法值:例如在解析HTML表格时使用了硬编码的索引(如list3.get(10)),这容易因邮件
recommend-type

RH公司应收账款管理优化策略研究

资源摘要信息:"本文针对RH公司的应收账款管理问题进行了深入研究,并提出了改进策略。文章首先分析了应收账款在企业管理中的重要性,指出其对于提高企业竞争力、扩大销售和充分利用生产能力的作用。然后,以RH公司为例,探讨了公司应收账款管理的现状,并识别出合同管理、客户信用调查等方面的不足。在此基础上,文章提出了一系列改善措施,包括完善信用政策、改进业务流程、加强信用调查和提高账款回收力度。特别强调了建立专门的应收账款回收部门和流程的重要性,并建议在实际应用过程中进行持续优化。同时,文章也意识到企业面临复杂多变的内外部环境,因此提出的策略需要根据具体情况调整和优化。 针对财务管理领域的专业学生和从业者,本文提供了一个关于应收账款管理问题的案例研究,具有实际指导意义。文章还探讨了信用管理和征信体系在应收账款管理中的作用,强调了它们对于提升企业信用风险控制和市场竞争能力的重要性。通过对比国内外企业在应收账款管理上的差异,文章总结了适合中国企业实际环境的应收账款管理方法和策略。" 根据提供的文件内容,以下是详细的知识点: 1. 应收账款管理的重要性:应收账款作为企业的一项重要资产,其有效管理关系到企业的现金流、财务健康以及市场竞争力。不良的应收账款管理会导致资金链断裂、坏账损失增加等问题,严重影响企业的正常运营和长远发展。 2. 应收账款的信用风险:在信用交易日益频繁的商业环境中,企业必须对客户信用进行评估,以便采取合理的信用政策,降低信用风险。 3. 合同管理的薄弱环节:合同是应收账款管理的法律基础,严格的合同管理能够保障企业权益,减少因合同问题导致的应收账款风险。 4. 客户信用调查:了解客户的信用状况对于预测和控制应收账款风险至关重要。企业需要建立有效的客户信用调查机制,识别和筛选信用良好的客户。 5. 应收账款回收策略:企业应建立有效的账款回收机制,包括定期的账款跟进、逾期账款的催收等。同时,建立专门的应收账款回收部门可以提升回收效率。 6. 应收账款管理流程优化:通过改进企业内部管理流程,如简化审批流程、提高工作效率等措施,能够提升应收账款的管理效率。 7. 应收账款管理策略的调整和优化:由于企业的内外部环境复杂多变,因此制定的管理策略需要根据实际情况进行动态调整和持续优化。 8. 信用管理和征信体系的作用:建立和完善企业内部信用管理体系和征信体系,有助于企业更好地控制信用风险,并在市场竞争中占据有利地位。 9. 对比国内外应收账款管理实践:通过研究国内外企业在应收账款管理上的不同做法和经验,可以借鉴先进的管理理念和方法,提升国内企业的应收账款管理水平。 综上所述,本文深入探讨了应收账款管理的多个方面,为RH公司乃至其他同类型企业提供了应收账款管理的改进方向和策略,对于财务管理专业的教育和实践都具有重要的参考价值。
recommend-type

新手别慌!用BingPi-M2开发板带你5分钟搞懂Tina Linux SDK目录结构

# 新手别慌!用BingPi-M2开发板带你5分钟搞懂Tina Linux SDK目录结构 第一次拿到BingPi-M2开发板时,面对Tina Linux SDK里密密麻麻的文件夹,我完全不知道从哪下手。就像走进一个陌生的大仓库,每个货架上都堆满了工具和零件,却找不到操作手册。这种困惑持续了整整两天,直到我意识到——理解目录结构比死记硬背每个文件更重要。 ## 1. 为什么SDK目录结构如此重要 想象你正在组装一台复杂的模型飞机。如果所有零件都混在一个箱子里,你需要花大量时间寻找每个螺丝和面板。但如果有分门别类的隔层,标注着"机身部件"、"电子设备"、"紧固件",组装效率会成倍提升。Ti