- 博客(248)
- 资源 (12)
- 收藏
- 关注
原创 Mac中M系列芯片采用rbenv管理ruby版本
在新设备上(Mac mini m4)上安装Fvm管理ruby,发现有安装FVM会有各种问题,而且都是安装插件本身与设备兼容性问题。它可能会提示你运行一两行命令,将 Homebrew 添加到你的 Shell 环境中。下面是在你的 M4 Mac mini 上安装和管理稳定版 Ruby 的终极分步指南。等系统命令,对 Shell 的侵入性更强,有时可能会导致一些难以预料的环境问题。,而不是依赖 macOS 系统自带的、老旧且不应被用户直接使用的 Ruby。是它的一个插件,专门用来编译和安装不同版本的 Ruby。
          2025-08-04 18:17:14
           1200
1200
        
原创 属性 | Swift 6.1
Swift中的属性分为存储属性和计算属性。存储属性将常量和变量值作为实例的一部分存储,适用于类和结构体;计算属性通过getter和setter间接访问其他属性值,适用于类、结构体和枚举。属性可分为实例属性和类型属性(与类型本身关联)。此外,属性观察器可以监控属性值变化,属性包装器可复用getter/setter代码。存储属性包含变量属性和常量属性,常量结构体实例的所有属性不可变。延时加载属性(lazy)在首次访问时才初始化,需声明为变量。计算属性不直接存储值,而是通过计算获取或设置其他属性的值。
          2025-07-18 17:57:49
           1076
1076
        
原创 Swift 6.1基础 - 函数
Swift函数是执行特定任务的独立代码块,具有灵活的参数和返回值处理方式。函数可定义多个参数、无参数或无返回值,还能返回元组类型实现多重返回值。可选元组返回类型允许整个返回值为nil。函数参数支持默认值和in-out传递,函数类型可作为参数或返回值使用。通过嵌套函数可实现功能封装。Swift的函数语法既支持简单C风格,也支持带参数标签的Objective-C风格。
          2025-07-17 20:22:28
           900
900
        
原创 Swift 6.1 - 字符串和字符
Swift中的String类型提供了强大且Unicode兼容的字符串处理能力。字符串可通过字面量初始化,支持多行文本和特殊字符转义。字符串是值类型,在传递时会进行拷贝,确保安全性。可以通过isEmpty检查空字符串,使用for-in循环遍历字符。此外,Swift的字符串与Foundation的NSString无缝桥接,方便调用相关方法。扩展字符串分隔符允许包含特殊字符而不触发转义,多行字符串字面量则简化了多行文本的处理。字符串的可变性取决于其被声明为变量还是常量。
          2025-07-17 20:21:11
           1179
1179
        
原创 Swift6.1 - 基本运算符
Swift运算符分为基本运算符、算术运算符、比较运算符等。基本运算符包括赋值(=)、算术(+、-、*、/、%)和比较(==、>等)。Swift改进了C语言的运算符,如赋值运算符不返回值以避免错误。还新增了区间运算符(..<、...)。运算符分为一元、二元和三元,三元条件运算符(a ? b : c)是唯一的三元运算符。算术运算符禁止值溢出,支持字符串拼接。比较运算符返回布尔值,支持元组比较。三元运算符简化条件判断,如rowHeight = contentHeight + (hasHeader ?
          2025-07-16 21:06:59
           1104
1104
        
原创 Swift6.1 -- 元组、错误处理、断言和先决条件
本文介绍了Swift中的三个重要特性:元组、错误处理以及断言和先决条件。1. 元组允许多个不同类型值组合成一个复合值,支持分解、索引访问和命名元素访问,常用于函数返回值;2. 错误处理通过throws、try和do-catch机制实现,可捕获和处理函数执行中的错误;3. 断言和先决条件用于运行时检查条件,断言仅在调试模式下生效,而先决条件在生产和调试模式下都有效,确保程序状态正确。这些特性共同增强了Swift代码的安全性和可维护性。
          2025-07-16 19:56:04
           647
647
        
原创 Swift6.1 - 可选类型处理
Swift 中的可选类型(Optional)用于处理值缺失的情况,表示一个值可能存在或不存在。可选类型通过在类型后加问号(?)声明,如 Int?。可以通过以下方式处理可选值: nil:表示无值状态,任何可选类型都可以赋值为 nil。 可选绑定:使用 if let 或 guard let 安全解包可选值,仅在值存在时执行代码。 后备值:使用 ?? 提供默认值,当可选为 nil 时使用后备值。 强制解包:使用 ! 直接解包,但若值为 nil 会引发运行时错误。 隐式解包:声明为 Type!,假定后续始终有值,无
          2025-07-16 19:41:25
           1041
1041
        
原创 Swift6.1 - 基本数据类型
Swift 基础数据类型与变量 Swift 提供了丰富的数据类型系统,包括基本类型(Int、Double、Bool、String)和集合类型(Array、Set、Dictionary)。使用 let 声明常量,var 声明变量,支持类型注解和类型推断。Swift 具有类型安全特性,能防止类型错误。此外,Swift 引入了元组和可选类型等高级特性,支持字符串插值和嵌套注释。整数类型提供边界检查功能,Int 类型自动适配平台字长。代码中分号可选,但同一行多语句需用分号分隔。
          2025-07-16 19:00:26
           710
710
        
原创 Swift6.1 - 基础知识3: 协议和扩展、错误处理、范型
本文介绍了Swift中的协议、错误处理和泛型三大特性。1) 协议通过protocol定义,可以被类、结构体和枚举遵循,使用extension可为现有类型添加协议遵循;2) 错误处理使用遵循Error协议的枚举表示错误,通过do-catch或try?处理,defer确保代码最终执行;3) 泛型使用尖括号<>定义,支持函数和类型的泛型化,where子句可添加类型约束。这些特性共同增强了Swift代码的灵活性、安全性和可重用性。
          2025-07-16 16:01:01
           335
335
        
原创 Swift6.1 - 基础知识2: 对象和类、枚举和结构体、并发性
本文介绍了Swift中类和枚举的基本用法。在类部分,详细说明了类的定义、属性声明、方法创建、构造器(init)和析构器(deinit)的使用,以及继承和重写(override)的注意事项。文中还展示了计算属性(getter/setter)和属性观察器(willSet/didSet)的实现方式。在枚举部分,讲解了如何定义带有原始值的枚举(enum),包括访问原始值(rawValue)和通过原始值初始化枚举实例的方法。文章通过多个代码示例(如Shape、Square、Rank等)演示了这些概念的实际应用,并提供
          2025-07-16 15:54:33
           789
789
        
原创 Swift6.1 - 基础知识1: 简单值、控制流、函数和闭包
摘要:Swift 入门教程介绍了基础语法和特性。通过"Hello, world!"示例展示Swift的简洁性,无需main函数和分号。讲解了变量/常量声明(let/var)、类型推断、字符串插值、多行字符串和集合类型(数组/字典)。控制流部分涵盖if/switch条件语句,for/while循环,以及可选值的处理(if let/??)。特别说明了Swift的强类型特性,需要显式类型转换,并提供了多个练习帮助理解。还演示了范围运算符(..<)和字典遍历等实用技巧。
          2025-07-16 15:51:20
           905
905
        
原创 Flutter Socket 连接方案分析与适用场景
【Flutter Socket连接方案对比与实现】 本文对比了五种Flutter网络连接方案: 1️⃣ 原生Socket:适合IoT/自定义协议,提供高性能但需手动处理细节 2️⃣ WebSocket:推荐用于实时应用,支持双向通信且简单易用 3️⃣ Socket.IO:适合复杂实时应用,自带重连和房间管理功能 4️⃣ gRPC:适用于微服务通信,提供强类型接口 5️⃣ MQTT:专为IoT设计,支持低带宽环境 重点分析了前三种方案的实现代码,包括: 原生Socket的TCP/UDP连接管理 WebSock
          2025-07-15 16:35:24
           1215
1215
        
原创 Flutter 股票图实现分析与解决方案
本文介绍了Flutter中实现专业级K线图的最佳方案。推荐使用fl_chart库,该库提供完整的K线图支持、多种技术指标、高性能渲染和丰富交互功能。文章详细展示了代码结构,包括蜡烛图绘制、涨跌颜色区分、移动平均线计算等核心功能实现,并提供了触摸交互和工具提示的优化方案。在性能优化方面,建议采用数据分页加载、Canvas缓存和简化渲染等技巧。最后推荐了两个高质量的开源实现参考:fl_chart官方示例和StockChart高级实现,可作为完整解决方案。
          2025-07-15 15:05:08
           583
583
        
原创 Swift实现股票图:从基础到高级
本文介绍了股票K线图的核心实现方案,重点讲解了使用Core Graphics的原生绘制方法。该方案具有完全可控、高性能和高度定制化的优势。文章提供了完整的Swift代码实现,包括数据结构定义、视图绘制逻辑和关键指标计算方法。代码示例展示了如何绘制K线、成交量柱状图以及网格线,并包含价格范围计算、颜色区分涨跌等核心功能。此外还预留了绘制移动平均线等指标的接口,为金融应用的图表开发提供了实用参考方案。
          2025-07-15 14:29:04
           479
479
        
原创 SwiftUI 常用控件分类与使用指南
SwiftUI控件分类及使用示例摘要: 本文系统介绍了SwiftUI的核心控件,按功能分为七大类:1)文本显示控件(Text,Label,Link)的样式设置;2)图片显示控件(Image,AsyncImage)的加载与裁剪;3)按钮与交互控件(Button,Menu,ContextMenu)的点击事件处理;4)输入控件(TextField,TextEditor,SecureField)的文本输入;5)选择器控件(Toggle,Picker,Slider,Stepper,DatePicker)的值选择;6)
          2025-07-14 18:14:36
           849
849
        
原创 SwiftUI 全面介绍与使用指南
SwiftUI是苹果2019年推出的跨平台UI框架,采用声明式语法构建应用界面。其主要优势包括:实时预览、自动UI更新、跨平台支持和简单动画实现。基础组件涵盖文本、按钮、图片和输入框等,通过VStack、HStack和ZStack实现灵活布局。状态管理使用@State和@StateObject等属性包装器,支持数据绑定和状态共享。列表视图(List)配合NavigationStack实现导航功能,Toolbar添加导航栏按钮。SwiftUI通过组合简单组件构建复杂界面,大幅提升开发效率,统一了苹果各平台的U
          2025-07-14 17:47:09
           1245
1245
        
原创 Combine的介绍与使用
Combine是Apple推出的声明式响应式编程框架,专为Swift设计,适用于iOS 13+和macOS 10.15+。核心概念包括Publisher(数据生产者)、Subscriber(数据消费者)、Operator(数据转换)和Subject(手动发送值)。框架支持链式调用操作符进行数据处理,如map、filter等,并能处理网络请求、错误处理和多个Publisher的组合。在UIKit和SwiftUI中,Combine可实现数据绑定和状态管理,例如文本输入实时搜索和列表更新。其统一API简化了异步事
          2025-07-14 17:26:36
           948
948
        
原创 RxSwift的介绍与使用
RxSwift是Swift的响应式编程框架,基于ReactiveX标准实现,通过观察者模式简化异步事件处理。核心概念包括Observable(数据源)、Observer(订阅者)、Operator(操作符)等。基础用法涵盖事件订阅、链式操作、UI绑定和网络请求等场景,支持线程切换和请求组合。RxSwift适用于实时搜索、表单验证、状态管理等复杂异步操作,可通过CocoaPods或SPM安装。虽然学习曲线较陡,但配合可视化工具能有效提升开发效率。
          2025-07-14 16:59:12
           1170
1170
        
原创 SnapKit介绍与使用
SnapKit是Swift开发的优雅自动布局框架,提供简洁的链式语法和类型安全特性,比原生NSLayoutConstraints代码量减少70%以上。支持iOS/macOS/tvOS平台,可通过CocoaPods或Swift Package Manager安装。核心功能包括居中布局、相对视图排列、比例约束和优先级设置,还能保存约束引用实现动态更新。示例展示了基本居中视图、多视图排列、比例布局、约束更新动画以及复杂个人资料卡片布局的实现方式,显著简化了AutoLayout的开发流程。
          2025-07-14 16:08:06
           1127
1127
        
原创 在加载图片的时候滑动tableview,图片加载会出现错乱是什么原因,怎么处理
UITableView滑动时图片错乱问题主要由Cell重用机制和异步加载时序导致。解决方案包括:1)在prepareForReuse中取消旧请求;2)使用Kingfisher/SDWebImage等库自动处理;3)加载前重置占位图;4)绑定数据模型校验。关键原则是取消无效请求、验证状态一致性、使用占位图并避免阻塞主线程。推荐结合第三方库的缓存和优先级控制功能优化性能,确保快速滑动时图片正确显示。
          2025-07-14 15:38:32
           639
639
        
原创 oc分类和swift扩展有哪些区别
特性Objective-C 分类Swift 扩展作用对象仅 Objective-C 类类、结构体、枚举、协议存储属性❌(需关联对象模拟)❌计算属性❌✅方法覆盖⚠️ 允许(有风险)❌ 编译禁止协议默认实现❌✅泛型支持❌✅(通过**where**子句)安全性低(运行时冲突)高(编译时检查)需动态添加属性/覆盖方法 →Objective-C 分类(需谨慎)。需类型安全/添加计算逻辑/扩展协议 →Swift 扩展。
          2025-07-12 20:40:08
           965
965
        
原创 使用包管理工具CocoaPods、SPM、Carthage的利弊与趋势
iOS/macOS开发中三大依赖管理工具对比: CocoaPods:成熟稳定,自动集成但性能较差,适合中小项目; SPM:Apple官方方案,轻量高效但功能有限,推荐新项目使用; Carthage:非侵入式设计,适合大型项目但需手动配置。 2023年使用率显示SPM(82%)上升最快,CocoaPods(58%)下降。迁移建议:新项目首选SPM,旧项目可混合使用SPM+CocoaPods/Carthage,逐步向纯SPM过渡。
          2025-07-12 19:46:27
           854
854
        
原创 defer关键字
Swift中的defer关键字用于在作用域退出前执行代码块,确保清理操作始终被执行。核心特性包括:延迟执行(逆序执行多个defer)、作用域绑定。主要应用场景为资源清理、锁管理、错误处理和状态恢复。需要注意作用域规则、返回值影响、循环行为等细节。相比Java和Python的类似机制,Swift的defer更加灵活,可用于任意作用域。最佳实践包括保持defer块简洁、正确处理资源依赖关系以及与do-catch配合使用。defer是Swift实现资源管理安全性和代码可读性的重要工具。
          2025-07-11 16:36:51
           424
424
        
原创 SwiftUI视图更新流程
SwiftUI视图构建流程解析:从状态变更到屏幕渲染 SwiftUI采用高效的声明式UI设计,其视图更新流程包含状态变更、依赖跟踪、差异比较和渲染四个关键阶段。当状态变化时,SwiftUI的依赖跟踪系统会标记受影响视图,视图树管理器将更新请求加入队列。差异引擎通过结构相等性检查比较新旧视图树,仅对有变化的视图执行body计算,最终生成最小变更集提交渲染。优化手段包括惰性求值、批量更新、稳定视图标识等。开发者应注意保持body轻量、合理使用状态管理,并利用事务控制动画行为。这种按需更新机制显著提升了复杂界面的
          2025-07-11 16:16:40
           1107
1107
        
原创 SwiftUI的页面生命周期
SwiftUI 视图生命周期解析 SwiftUI采用声明式编程模型,视图生命周期与UIKit不同,主要包含以下阶段: 视图初始化 (init) 在视图首次创建或重建时调用,SwiftUI可能频繁创建视图实例 视图构建 (body) 每次状态变化都会重新计算,应保持轻量级 视图出现 (.onAppear) 相当于UIKit的viewDidAppear,适合数据加载和启动任务 视图消失 (.onDisappear) 相当于UIKit的viewDidDisappear,用于清理资源 视图更新 通过@State、@
          2025-07-11 15:27:34
           1082
1082
        
原创 swift开发,关于应用、页面、视图的生命周期
本文详细介绍了iOS开发中的生命周期管理,包括应用、页面和视图三个层次。UIKit和SwiftUI的实现方式对比鲜明:UIKit通过AppDelegate和UIViewController的明确方法管理,SwiftUI则采用声明式语法和状态驱动。关键差异在于UIKit需要手动处理视图显示/隐藏和异步任务,而SwiftUI通过.onAppear/.task等修饰符自动管理。最佳实践建议UIKit在viewDidLoad初始化数据,SwiftUI优先使用.onAppear和.task。掌握这些生命周期有助于优化
          2025-07-10 19:42:25
           864
864
        
原创 struct Clamped<T: Comparable> 中<T: Comparable>是什么含义
Swift泛型中的struct Clamped<T: Comparable>通过类型参数T和协议约束: Comparable实现类型安全的范围限定功能。T作为占位符类型可接受多种具体类型,而Comparable约束确保类型支持比较操作,这是实现值范围检查的关键。该机制在编译时强制类型合规性,支持数值、日期等可比较类型,若使用不符合的类型会直接报错。这种设计既保证了代码的通用性,又通过编译时检查避免了运行时错误,体现了Swift的类型安全特性。
          2025-07-10 15:50:21
           281
281
        
原创 swift中常见属性包装器
Swift属性包装器是Swift中强大的特性,允许在属性存储和访问间添加自定义逻辑。本文介绍了SwiftUI核心属性包装器(@State、@Binding、@ObservedObject、@EnvironmentObject)、Combine框架的@Published以及三种自定义属性包装器实现(自动大写、数值约束、线程安全)。这些特性通过封装属性访问逻辑,实现了声明式代码与逻辑复用的平衡,显著减少了模板代码量。文章还总结了各包装器的主要用途和使用场景,展示如何提升代码可维护性和可读性。
          2025-07-10 15:36:26
           573
573
        
原创 numbers.map { $0 * 2 }中$0的含义
0在 Swift 中,$0是一个(shorthand argument name),它是 Swift 闭包语法中的特殊简写形式。
          2025-07-10 11:46:24
           485
485
        
原创 函数: func add(_ a: Int) -> (Int) -> Int {{ a + $0 } } 中 _ 是什么含义
在 Swift 函数声明中,参数前的下划线 _ 作为参数标签占位符,主要作用是省略外部参数标签,使函数调用更简洁。当函数名已明确参数含义时(如数学运算),使用 _ 可以避免重复标签。在柯里化函数中,_ 保证调用链的风格统一。函数内部仍需使用参数名访问值。Swift 标准库的运算符类函数多采用这种设计,以简化语法并保持代码清晰。
          2025-07-10 11:27:34
           342
342
        
原创 柯里化(Currying)技术
本文详细解析了柯里化技术在Swift中的实现与应用。通过将多参数函数拆解为单参数函数链,如add(_ a: Int)返回(Int)->Int的闭包,实现了参数分离和部分应用。关键特性包括闭包捕获外部变量、参数预固定(如add(5)生成专用加法器)和模块化函数复用。典型应用场景包括创建税率计算器(固定增值税率)和序列号生成器(增量生成ID)。柯里化技术体现了函数式编程的核心优势,通过参数分解增强代码的灵活性和组合能力。
          2025-07-10 11:12:17
           330
330
        
原创 闭包在swift中的分类
Swift闭包主要分为六大类型:1)按语法形式分为全局函数、嵌套函数、闭包表达式和尾随闭包;2)按生命周期分为非逃逸闭包和逃逸闭包;3)特殊功能类包括自动闭包和自动逃逸闭包;4)按内存行为分为强/弱/无主引用闭包;5)按函数特性分为高阶函数闭包和柯里化闭包;6)按捕获行为分为无捕获、值捕获和引用捕获。理解这些类型有助于编写高效、安全的Swift代码,尤其在异步编程和内存管理方面。
          2025-07-09 19:21:28
           407
407
        
原创 闭包、自动闭包、逃逸闭包
Swift闭包有三种形式:普通闭包、自动闭包(@autoclosure)和逃逸闭包(@escaping)。普通闭包是可传递的代码块,能捕获上下文变量;自动闭包将表达式自动包装成闭包实现延迟求值,常用于日志和断言;逃逸闭包生命周期超出函数作用域,用于异步回调和存储操作。三者关键区别在于执行时机、语法形式和使用场景。自动闭包优化性能,逃逸闭包需注意内存管理。实际开发中可组合使用,如逃逸闭包+自动闭包实现异步延迟消息生成。最佳实践是优先非逃逸闭包,按需选用其他类型并注意内存安全。
          2025-07-09 19:11:36
           429
429
        
原创 逃逸闭包(Escaping Closure)
逃逸闭包是Swift中在函数返回后仍可调用的闭包,需用@escaping标记。主要特征包括生命周期延长和潜在内存风险。与非逃逸闭包相比,逃逸闭包需手动管理内存,常用于异步回调等场景。为避免循环引用等问题,应采用捕获列表(如[weak self])、显式声明变量、缩小捕获范围或使用结构体封装。典型应用包括异步操作、事件处理和动画回调。内存安全最佳实践包括:优先使用弱引用、避免修改外部变量、利用调试工具检查捕获情况。常见陷阱有循环引用和数据竞争,可通过适当捕获方式和同步机制解决。正确处理逃逸闭包对Swift高级
          2025-07-09 17:08:50
           657
657
        
原创 值类型大小与内存分配
Swift中值类型的内存分配由使用场景和编译器优化共同决定,遵循以下核心规则:1)优先栈分配,适用于局部变量和小型数据;2)特定条件下自动堆分配,如被闭包捕获、作为类属性、包含引用类型成员或大型集合类型。实际分配受结构体大小影响,经验阈值是:<64字节基本栈分配,64-256字节视上下文而定,>256字节通常堆分配。建议优化策略包括控制结构体大小、避免闭包捕获大型值、使用COW(Copy-On-Write)封装大型数据。开发者无需手动指定内存位置,理解这些规则有助于编写高性能代码和优化内存敏感场
          2025-07-09 16:17:00
           754
754
        
原创 值类型如何分配堆栈?
Swift中值类型的内存分配并非都在栈上,而是取决于使用场景和类型大小。小型值类型(如简单结构体)通常栈分配,而大型值类型(如大数组)实际数据存储在堆上,栈上只保留指针。被闭包捕获的值类型也会提升到堆上。建议优先使用小型值类型(小于64字节),警惕闭包捕获开销,并利用Copy-On-Write优化大型值类型。Swift通过智能分配机制(栈/堆结合)和COW优化,实现了性能与安全的平衡。
          2025-07-09 12:07:55
           1037
1037
        
原创 Swift 的值类型有哪些
Swift中的值类型(Value Types)是其核心特性之一,主要包括结构体(Struct)、枚举(Enum)和元组(Tuple)。值类型在赋值或传递时会创建独立副本,具有栈分配、线程安全和不可共享状态等特点。Swift标准库中的Array、Dictionary、Set和String等集合也属于值类型,并采用写时复制(COW)优化性能。与引用类型(Class)相比,值类型更安全且高效,适合优先使用。开发者可通过组合值类型和利用COW优化来提升性能,这也是Apple官方推荐的做法。
          2025-07-09 11:03:22
           678
678
        
原创 Swift 中的COW(写时复制)
Swift中的COW(写时复制)是一种优化值类型内存使用的技术。当多个变量共享同一数据时,COW会延迟复制操作,直到某个变量尝试修改数据时才创建独立副本。这一机制避免了大型数据结构(如数组、字典)的不必要复制,提升性能。开发者可通过引用计数检查实现自定义COW类型,但需注意COW仅在修改时触发。Swift标准库中的Array、String等类型已内置COW优化,在保证值类型语义安全的同时实现高效内存管理。
          2025-07-09 10:34:57
           595
595
        
原创 Swift - 方法派发机制
Swift的方法派发机制主要包括静态派发、动态派发和协议派发。静态派发在编译时确定方法实现,适用于值类型、final类和全局函数,性能最高。动态派发分为虚表派发(类的默认方式)和消息转发(通过@objc/dynamic标记实现),支持继承重写和与Objective-C交互。协议派发使用协议见证表处理协议方法调用。此外,扩展方法和泛型方法遵循特殊派发规则。合理选择派发方式有助于提升代码性能和灵活性。
          2025-07-09 10:11:32
           960
960
        
原创 Swift与OC相比有什么优势?
1. 性能碾压:静态派发+值类型使算法快2.6倍(苹果实测),对象创建提速1.8倍2. 革命性安全:编译时空安全(?拦截nil崩溃,Objective-C主要错误源)边界检查防缓冲区溢出3. 开发效率飞跃:精简50%+样板代码(去分号/方括号)Playground实时调试+原生async/await并发4. 未来生态:苹果新框架(SwiftUI/ARKit)独占支持跨平台扩展(服务端/Android/WebAssembly)
          2025-07-09 10:06:25
           744
744
        
OKR的基本介绍
2018-10-21
(vue.js)nuxt.js:IP端口/局域网配置
2018-11-01
         
      
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
 RSS订阅
RSS订阅