SwiftUI-基础
应用入口
Main函数与App结构体的绑定,遵循App协议
@main
struct BaseApp: App {var body: some Scene {WindowGroup {ContentView()}}
}
兼容UIApplicationDelegate
@main
struct BasicApp: App {@UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegatevar body: some Scene { ... }
}class AppDelegate : NSObject, UIApplicationDelegate {func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {// launching...return true}
}
Swift 结构体与类的构造函数
// struct
struct BasicApp: App {init() { ... }
}// class
class AppDelegate: NSObject, UIApplicationDelegate {override init () { ... }
}
视图预览
遵守View协议,定义View结构体
struct ContentView: View {var body: some View {Text("Hello, world!").padding()}
}
遵守PreviewProvider协议,定义Previews结构体
struct ContentView_Previews: PreviewProvider {static var previews: some View {ContentView()}
}
UI布局
struct ContentView: View {var body: some View {VStack(alignment: .center, spacing: 30) {Text("文本").foregroundColor(.black)Button {print("target_action")} label: {Text("按钮").foregroundColor(.blue)}}}
}
VStack - 纵向布局
var body: some View {VStack(alignment: .leading, spacing: 10) { // 左对齐、元素间隔10pxText("Column 1")Text("Column 2")}.padding(20) // 内边距20px
}
HStack - 横向布局
var body: some View {HStack(spacing: 10) { // 居中、元素间隔10pxText("Column 1")Text("Column 2")}.padding() // 内边距-默认值
}
Text - 文本
var body: some View {Text("Hello, SwiftUI!").font(.title) // 字体设置.foregroundColor(.blue) // 文本颜色设置.multilineTextAlignment(.center) // 多行文本对齐方式设置.lineLimit(1) // 文本行数限制设置
}
Button - 按钮
var body: some View {Button { print("Button tapped") // 按钮点击事件处理} label: {Text("Click Me") // 按钮显示的文本.font(.title) // 字体设置.padding() // 内边距设置.background(Color.blue) // 背景颜色设置.foregroundColor(.white) // 前景颜色设置.cornerRadius(10) // 圆角设置}
}
Image - 图像
var body: some View {Image("exampleImage") // 根据名称加载图像.resizable() // 图像可调整大小.frame(width: 100, height: 100) // 设置图像框的尺寸.background(.gray)
}
TextField - 文本输入
@State private var textInput: String = ""var body: some View {VStack {TextField("Enter text", text: $textInput).textFieldStyle(RoundedBorderTextFieldStyle()) // 输入框样式设置.padding() // 内边距设置Text("You entered: \(textInput)")}.padding()
}
ScrollView - 滚动视图
var body: some View {ScrollView {ForEach(1...10, id: \.self) { index inText("Item \(index)").padding()}}
}
List - 表视图
var body: some View {List {Text("Row 1")Text("Row 2")Text("Row 3")}.listStyle(InsetListStyle()) // 样式设置
}
TextView - 多行文本输入
@State private var textInput: String = ""var body: some View {VStack {TextEditor(text: $textInput) // 多行文本输入视图.frame(height: 200) // 设置高度.border(Color.gray, width: 1) // 边框设置Text("You entered: \(textInput)")}.padding()
}
Alert - 警告弹窗
@State private var showAlert = falsevar body: some View {Button {showAlert = true} label: {Text("Show Alert")}.alert(isPresented: $showAlert) {Alert(title: Text("Warning"), message: Text("This is an alert!"), dismissButton: .default(Text("OK")))}
}
ActionSheet - 底部弹窗
@State private var showActionSheet = falsevar body: some View {Button {showActionSheet = true} label: {Text("Show ActionSheet")}.actionSheet(isPresented: $showActionSheet) {ActionSheet(title: Text("Options"), message: Text("Choose an action"), buttons: [.default(Text("Option 1"), action: {// Option 1 action}),.default(Text("Option 2"), action: {// Option 2 action}),.cancel() // 取消按钮])}
}
Picker - 选择器
@State private var selectedOption = 0
let options = ["Option 1", "Option 2", "Option 3"]var body: some View {VStack {Text("Selected option: \(options[selectedOption])")Picker("Options", selection: $selectedOption) {ForEach(0..<options.count, id: \.self) { index inText(options[index])}}.pickerStyle(WheelPickerStyle()) // 选择器样式设置}.padding()
}相关文章:
SwiftUI-基础
应用入口 Main函数与App结构体的绑定,遵循App协议 main struct BaseApp: App {var body: some Scene {WindowGroup {ContentView()}} } 兼容UIApplicationDelegate main struct BasicApp: App {UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate…...
vue。cli怎么使用自定义组件,会有哪些问题
在Vue CLI中使用自定义组件的步骤如下: 通过仔细检查以上问题并按照正确的步骤使用自定义组件,大多数问题都可以解决。此外,查看开发者工具的控制台输出和Vue警告信息,可以帮助你进一步调试和解决可能出现的问题 创建自定义组件&a…...
linux----vim的使用
vi和vim是Linux下的一个文本编辑工具,最小化安装只有vi vim,需要额外安装,比vi更强大一些 # vim 操作文件,有三种模式:普通模式,编辑模式,命令模式 -vim 文件名刚进来----》普通模式--》只…...
95. Python基础教程:异常处理try...except语句
【目录】 文章目录 1. try...except语法解析2. 程序异常3. except的4种使用方式3.1 单独的except3.2 except 异常名称3.3 except 异常类型 as 别名3.4 except (异常类型1,异常类型2) as 别名 4. 总结 【正文】 1. try…except语法解析 try[traɪ]:尝试。 except[…...
详解rocketMq通信模块升级构想
本文从开发者的角度深入解析了基于netty的通信模块, 并通过简易扩展实现微服务化通信工具雏形, 适合于想要了解netty通信框架的使用案例, 想了解中间件通信模块设计, 以及微服务通信底层架构的同学。希望此文能给大家带来通信模块架构灵感。 概述 网络通信是很常见的需求&#…...
【BOOST程序库】对字符串的处理
基本概念这里不解释了,代码中详细解释了BOOST程序库中对于字符串每一个方法的详细用法: 注意:这里每实践一个方法,都将上面实践过的方法进行了注释,如果全部取消注释,会出现重命名的问题。 #include <…...
(学习笔记-内存管理)虚拟内存
单片机是没有操作系统的,每次写完代码,都需要借助工具把程序烧录进去,这样程序才能跑起来。另外,单片机的CPU是直接操作内存的[物理地址]。 在这种情况下,要想在内存中同时运行两个程序是不可能的。如果第一个程序在 2…...
JVM理论(七)性能监控与调优
概述 性能优化的步骤 性能监控:就是通过以非强行或入侵方式收集或查看应用程序运行状态,包括如下问题 GC频繁CPU过载过高OOM内存泄漏死锁程序响应时间较长性能分析:通常在系统测试环境或者开发环境进行分析 通过查看程序日志以及GC日志,或者运用命令行工…...
复现YOLOv8改进最新MPDIoU:有效和准确的边界盒回归的损失,打败G/E/CIoU,效果明显!!!
MPDIoU: A Loss for Efficient and Accurate Bounding Box Regression 论文简介MPDIoU核心设计思路论文方法实验部分加入YOLOv5代码论文地址:https://arxiv.org/pdf/2307.07662.pdf 论文简介 边界盒回归(Bounding box regression, BBR)广泛应用于目标检测和实例分割,是目标…...
LT6911C 是一款HDMI 1.4到双端口MIPIDSI/CSI或者LVDS加音频的一款高性能芯片
LT6911C 1.描述: LT6911C是一款高性能的HDMI1.4到MIPIDSI/CSI/LVDS芯片,用于VR/智能手机/显示器应用程序。对于MIPIDSI/CSI输出,LT6911C具有可配置的单端口或双端口MIPIDSI/CSI,具有1个高速时钟通道和1个~4个高速数据通道&#…...
vue动态引入静态资源
vue动态引入静态资源 静态资源位置(../../assets/piecture/page404.jpg)或者(/assets/piecture/page404.jpg) 错误引入方式 错误引入方式(一) <template><div><img :src"../../asset…...
perl 强制覆盖拷贝文件
如果你想在Perl中进行文件拷贝时强制覆盖目标文件(如果目标文件已经存在),你可以使用标准模块File::Copy提供的cp函数,它允许你指定是否覆盖目标文件。 以下是一个示例,展示了如何在Perl中进行强制覆盖拷贝文件&#…...
C语言每日一题之整数求二进制1的个数
今天分享一道题目,用三种方法来求解 二进制1的个数 方法1 我们的十进制除10和取余数就可以得到我们每一位的数字,那我们的二进制也可 以 #include<stdio.h> int num_find_1(unsigned int n) {int count 0;while (n){if (1 n % 2){count;}n / 2…...
AcWing 4443.无限区域
原题链接:AcWing 4443.无限区域 题目来源:夏季每日一题2023 给定一个无限大的二维平面,设点 S 为该平面的中心点。 设经过点 S 的垂直方向的直线为 P,如果直线 P 是一个圆的切线,且切点恰好为点 S,那么&a…...
2D坐标系下的点的转换矩阵(平移、缩放、旋转、错切)
文章目录 1. 平移 (Translation)2. 缩放 (Scaling)3. 旋转 (Rotation)4. 错切 (Shearing)5. 镜像 (Reflection) 1. 平移 (Translation)…...
【Rabbitmq】报错:ERROR CachingConnectionFactory Channel shutdown: channel error;
报错内容 ERROR CachingConnectionFactory Channel shutdown: channel error; protocol method: #method<channel.close>(reply-code406, reply-textPRECONDITION_FAILED - unknown delivery tag 1, class-id60, method-id80) 原因 默认是自动ack,然后你代码…...
el-table组件的el-table-column电脑端使用fixed属性固定,移动端不使用固定,怎么实现?
要在电脑端使用 fixed 固定列,而在移动端不使用,可以使用 CSS 媒体查询结合 Vue 的动态绑定来实现。以下是一个示例代码: <template><el-table><el-table-columnprop"name"label"Name":fixed"isDesk…...
RocketMQ 行业分享
5.0的架构发生了重大调整,添加了一层rocketmq-proxy,可以通过grpc的方式接入。 参考 https://juejin.cn/post/7199413150973984827...
物联网场景中的边缘计算解决方案有哪些?
在物联网场景中,边缘计算是一种重要的解决方案,用于在物联网设备和云端之间进行实时数据处理、分析和决策。HiWoo Box作为工业边缘网关设备,具备边缘计算能力,包括单点公式计算、Python脚本编程以及规则引擎,它为物联网…...
【C++ 进阶】学习导论:C/C++ 进阶学习路线、大纲与目标
目录 一、C 学习路线 二、C 课程大纲与学习目标 (1)第一阶段:C 语言基础 (2)第二阶段:C 高级编程 (3)第三阶段:C 核心编程与桌面应用开发 (4…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...
【SpringBoot自动化部署】
SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一,能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时,需要添加Git仓库地址和凭证,设置构建触发器(如GitHub…...
【Veristand】Veristand环境安装教程-Linux RT / Windows
首先声明,此教程是针对Simulink编译模型并导入Veristand中编写的,同时需要注意的是老用户编译可能用的是Veristand Model Framework,那个是历史版本,且NI不会再维护,新版本编译支持为VeriStand Model Generation Suppo…...
6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础
第三周 Day 3 🎯 今日目标 理解类(class)和对象(object)的关系学会定义类的属性、方法和构造函数(init)掌握对象的创建与使用初识封装、继承和多态的基本概念(预告) &a…...
Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践
前言:本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中,跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南,你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案,并结合内网…...
Monorepo架构: Nx Cloud 扩展能力与缓存加速
借助 Nx Cloud 实现项目协同与加速构建 1 ) 缓存工作原理分析 在了解了本地缓存和远程缓存之后,我们来探究缓存是如何工作的。以计算文件的哈希串为例,若后续运行任务时文件哈希串未变,系统会直接使用对应的输出和制品文件。 2 …...
PH热榜 | 2025-06-08
1. Thiings 标语:一套超过1900个免费AI生成的3D图标集合 介绍:Thiings是一个不断扩展的免费AI生成3D图标库,目前已有超过1900个图标。你可以按照主题浏览,生成自己的图标,或者下载整个图标集。所有图标都可以在个人或…...
