欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報邀請碼778899分享:ios SwiftUI入門篇

柚子快報邀請碼778899分享:ios SwiftUI入門篇

http://yzkb.51969.com/

1.?介紹

SwiftUI是由蘋果公司推出的現(xiàn)代化用戶界面(UI)框架,用于開發(fā)iOS、macOS、watchOS和tvOS應用程序。它于2019年首次發(fā)布,是蘋果在Swift編程語言之上的一層抽象,旨在簡化和改進應用程序的UI開發(fā)過程。相比UIKit具有多方面的優(yōu)勢和特點,這些特點使得它成為iOS和其他Apple平臺開發(fā)中的強大工具:

????????聲明式語法:

SwiftUI:開發(fā)者通過簡單的Swift代碼描述UI的結(jié)構(gòu)和外觀,采用聲明式語法。這種方式比傳統(tǒng)的UIKit的命令式編程風格更直觀和易于理解。

UIKit:開發(fā)者需要編寫大量的代碼來配置和管理UI元素的屬性和行為,這種方式容易導致代碼的復雜性和難以維護性。

????????實時預覽和交互性:

SwiftUI:結(jié)合Xcode的實時預覽功能,開發(fā)者可以即時查看和交互他們所寫的UI代碼,無需在模擬器或真機上運行應用程序。

UIKit:開發(fā)者需要不斷地在模擬器或真機上運行應用程序來查看UI效果,這增加了開發(fā)周期和調(diào)試的復雜性。

???????????????????????????????????????????跨平臺開發(fā):

SwiftUI:支持iOS、macOS、watchOS和tvOS平臺的開發(fā),可以共享大部分代碼和UI邏輯,減少了重復工作。UIKit:雖然UIKit也能夠跨平臺開發(fā),但是每個平臺之間的UI代碼和布局通常需要顯著的適配和調(diào)整。

????????自動化布局:

SwiftUI:提供了一系列簡單且強大的布局視圖(如VStack、HStack、ZStack等),幫助開發(fā)者輕松地實現(xiàn)復雜的UI布局。

UIKit:雖然Auto Layout提供了強大的布局管理系統(tǒng),但是配置和管理約束條件需要編寫大量的代碼,對于復雜布局來說較為繁瑣。

????????狀態(tài)管理和數(shù)據(jù)綁定:

SwiftUI:引入了屬性綁定(@State、@Binding)和狀態(tài)對象(@StateObject、@ObservedObject),使得數(shù)據(jù)與UI視圖之間的綁定更加簡單和直觀。

UIKit:開發(fā)者需要手動管理數(shù)據(jù)和UI視圖之間的同步,通常需要使用委托、通知或KVO等模式。

????????現(xiàn)代化設計支持:

SwiftUI:內(nèi)置支持現(xiàn)代化設計語言,如暗黑模式、動態(tài)字體調(diào)整等,能夠自動響應系統(tǒng)級別的外觀變化。

UIKit:雖然也能夠支持現(xiàn)代化設計語言,但是需要開發(fā)者顯式地處理外觀變化和主題切換。

綜上所述,SwiftUI通過其聲明式語法、實時預覽、跨平臺開發(fā)支持以及更簡單的布局和狀態(tài)管理等特點,顯著提升了iOS開發(fā)的效率和開發(fā)體驗,使得開發(fā)者能夠更快速地構(gòu)建出現(xiàn)代化和響應式的應用程序。

2.?環(huán)境搭建

????????2.1?Xcode安裝和配置

從Mac AppStore或者蘋果開發(fā)者網(wǎng)站?Sign In - Apple?下載并安裝Xcode,可以依據(jù)需要,安裝iPhone/iPad/Apple VisionPro模擬器,支持模擬器/真機調(diào)試。

2.2?創(chuàng)建第一個SwiftUI項目

打開Xcode,創(chuàng)建新項目,配置項目信息:

名稱(e.g:“MyFirstSwiftUIApp”)

組織標識符(e.g:“com.yourcompany”)

選擇開發(fā)團隊

選擇開發(fā)語言(Swift或Objective-C)和界面(Storyboard或SwiftUI)

即可創(chuàng)建并預覽項目,運行第一個SwiftUI項目。

3.?SwiftUI基礎(chǔ)

3.1?SwiftUI的視圖結(jié)構(gòu)和聲明式語法

3.1.1?視圖結(jié)構(gòu)

SwiftUI的視圖結(jié)構(gòu)是基于一種嵌套和組合的方式來構(gòu)建UI界面的,核心的視圖類型包括:

????????View:所有的UI組件都是視圖(View)。視圖可以是簡單的文本、圖像,也可以是更復雜的組合視圖。

????????Container Views:這些視圖用于組合其他視圖,常見的容器視圖包括:

VStack:垂直堆棧,將子視圖垂直排列。

HStack:水平堆棧,將子視圖水平排列。

ZStack:層疊視圖,將子視圖層疊在一起。

List:列表視圖,顯示動態(tài)內(nèi)容列表。

????????Control Views:用于用戶交互的視圖,如按鈕(Button)、滑塊(Slider)、文本輸入框(TextField)等。

????????Modifier:修飾符可以應用于視圖,以更改其外觀或行為。例如,.foregroundColor(.blue)可以設置文本顏色為藍色。

3.1.2?聲明式語法

SwiftUI使用聲明式語法來描述UI的外觀和行為,與傳統(tǒng)的命令式編程風格有顯著不同。聲明式語法的關(guān)鍵點包括:

????????簡單和直觀:您只需描述UI應該顯示什么樣子,而不是告訴計算機如何繪制它。

????????無需手動更新:當視圖的狀態(tài)(state)發(fā)生變化時,SwiftUI會自動更新視圖的顯示,而不需要手動管理UI的刷新。

????????數(shù)據(jù)驅(qū)動:視圖通常會綁定到某些數(shù)據(jù),當數(shù)據(jù)變化時,視圖會相應地更新。這通過屬性綁定(@State、@Binding)、狀態(tài)對象(@StateObject、@ObservedObject)來實現(xiàn)。

????????組合性:可以將小的視圖組合成更大的視圖,形成復雜的UI結(jié)構(gòu)。這種組合性使得UI的構(gòu)建更加靈活和模塊化。

????????預覽功能:Xcode的實時預覽功能允許開發(fā)者在編寫代碼時即時看到UI的外觀,這大大提高了開發(fā)效率。

3.1.3?示例代碼

下面是一個簡單的SwiftUI代碼示例,展示了視圖結(jié)構(gòu)和聲明式語法的應用:

import SwiftUI

struct ContentView: View {

????@State private var isButtonVisible = true??// 屬性包裝器用于管理視圖狀態(tài)

????

????var body: some View {

????????VStack { // 垂直堆棧視圖 (VStack)

????????????Text("Hello, SwiftUI!") // 簡單文本視圖

????????????

????????????if isButtonVisible {

????????????????Button("Toggle Button") {

????????????????????self.isButtonVisible.toggle()

????????????????}

????????????}

????????}

????????.padding() // 修飾符,添加內(nèi)邊距

????}

}

// 實時預覽

struct ContentView_Previews: PreviewProvider {

????static var previews: some View {

????????ContentView()

????}

}

3.2?布局和視圖組合

在SwiftUI中,布局和視圖組合是構(gòu)建用戶界面的關(guān)鍵部分。SwiftUI提供了一系列容器視圖和布局視圖,使得開發(fā)者能夠以簡單和直觀的方式創(chuàng)建復雜的布局和組合視圖。

3.2.1?布局視圖

SwiftUI中的布局視圖是用來排列和組織其他視圖的容器,常用的布局視圖包括:

VStack:垂直堆棧視圖,將子視圖垂直排列。

VStack {

????Text("Item 1")

????Text("Item 2")

????Text("Item 3")

}

HStack:水平堆棧視圖,將子視圖水平排列。

HStack {

????Text("Left")

????Spacer()

????Text("Right")

}

ZStack:層疊視圖,將子視圖層疊在一起。

ZStack {

????Circle()

????????.foregroundColor(.blue)

????????.frame(width: 100, height: 100)

????

????Text("Centered Text")

????????.foregroundColor(.white)

}

List:列表視圖,用于顯示動態(tài)內(nèi)容列表。

List {

????Text("Item 1")

????Text("Item 2")

????Text("Item 3")

}

Form:表單視圖,用于顯示表單和輸入控件。

Form {

????TextField("Username", text: $username)

????SecureField("Password", text: $password)

????Button("Login") {

????????// Login action

????}

}

3.2.2?視圖組合

視圖組合是指將多個視圖組合在一起形成復雜的UI結(jié)構(gòu),可以通過嵌套不同的布局視圖和控件視圖來實現(xiàn)。例如:???????

VStack {

????Text("Welcome to SwiftUI!")

????????.font(.largeTitle)

????

????HStack {

????????Image(systemName: "star.fill")

????????????.foregroundColor(.yellow)

????????Text("SwiftUI Basics")

????????????.font(.title)

????}

????

????Spacer()

????

????Button("Get Started") {

????????// Action to start the app

????}

????.padding()

}

.padding()

在這個例子中:

使用?VStack?將視圖垂直堆疊。

在?VStack?中使用?HStack?將圖標和標題水平排列。

使用?Spacer()?在垂直堆棧中創(chuàng)建一個可伸縮的空間。

在底部添加一個帶有動作的按鈕,并對其進行內(nèi)邊距修飾。

4.?基本組件

4.1?文本(Text)

Text?是用來顯示文本內(nèi)容的視圖組件。它允許您在應用程序中輕松地顯示靜態(tài)和動態(tài)文本,同時支持對文本進行樣式和布局設置。讓我們來詳細了解?Text?的用法和一些常見的樣式設置。

4.1.1?基本用法

使用?Text?最簡單的方式是傳入一個字符串作為其內(nèi)容:

struct ContentView: View {

????var body: some View {

????????Text("Hello, SwiftUI!")

????}

}

4.1.2?樣式設置

通過在?Text?上使用修飾符來設置文本的樣式,比如字體、顏色、對齊方式等。

字體和顏色

Text("Welcome")

????.font(.title)

????.foregroundColor(.blue)

對齊方式

Text("Centered Text")

????.multilineTextAlignment(.center)

加粗和斜體

Text("Bold and Italic")

????.bold()

????.italic()

4.1.3?動態(tài)文本

在?Text?中使用字符串插值或者變量來顯示動態(tài)文本內(nèi)容。例如:

struct ContentView: View {

????let username = "John Doe"

????

????var body: some View {

????????Text("Welcome, \(username)!")

????????????.font(.headline)

????????????.foregroundColor(.green)

????}

}

4.1.4?多行文本

如果文本內(nèi)容較長或者需要顯示多行文本,您可以使用?Text?的?lineLimit(nil)?和?multilineTextAlignment()?來設置文本的行數(shù)限制和對齊方式。

Text("This is a long text that may span multiple lines depending on the available space.")

????.lineLimit(nil)

????.multilineTextAlignment(.leading)

4.2?圖像(Image)

Image?是用來顯示圖像內(nèi)容的視圖組件。它允許您在應用程序中加載和顯示圖像,并支持對圖像進行大小調(diào)整、裁剪和其他樣式設置。讓我們來詳細了解?Image?的用法和一些常見的樣式設置。

4.2.1?基本用法

使用?Image?最簡單的方式是指定圖像的名稱,SwiftUI會自動查找和加載相應的圖像資源。通常,您需要將圖像資源添加到項目的?Assets.xcassets?中。

struct ContentView: View {

????var body: some View {

????????Image("yourImageName")

????}

}

4.2.2?圖像樣式和調(diào)整

圖像調(diào)整

可以使用修飾符來調(diào)整圖像的大小、比例和裁剪。

Image("yourImageName")

????.resizable() // 可調(diào)整大小

????.scaledToFit() // 按原始寬高比縮放適合父視圖

????.frame(width: 200, height: 200) // 設置框架大小

圖像修飾

可以對圖像進行進一步的修飾,例如添加圓角、邊框或者使用遮罩。

Image("yourImageName")

????.resizable()

????.clipShape(Circle()) // 添加圓形遮罩

????.overlay(Circle().stroke(Color.blue, lineWidth: 4)) // 添加藍色邊框

????.shadow(radius: 10) // 添加陰影效果

4.2.3?加載網(wǎng)絡圖像

要加載來自URL的圖像,可以使用?URLImage?庫或者自定義?View。以下是一個簡單的示例,演示如何加載網(wǎng)絡圖像:

struct RemoteImage: View {

????var imageUrl: String

????

????var body: some View {

????????if let url = URL(string: imageUrl), let imageData = try? Data(contentsOf: url) {

????????????Image(uiImage: UIImage(data: imageData)!)

????????????????.resizable()

????????????????.scaledToFit()

????????????????.frame(width: 200, height: 200)

????????} else {

????????????Text("Image not found")

????????}

????}

}

struct ContentView: View {

????var body: some View {

????????RemoteImage(imageUrl: "https://example.com/yourImage.jpg")

????}

}

4.3?按鈕(Button)

Button?是用來創(chuàng)建用戶可以點擊的交互性控件。它允許您在應用程序中添加按鈕,以觸發(fā)各種操作和響應用戶的輸入。讓我們來詳細了解?Button?的用法和一些常見的設置。

4.3.1?基本用法

使用?Button?最簡單的方式是在其構(gòu)造函數(shù)中傳入一個視圖(通常是?Text?或者?Image),作為按鈕的標簽。

struct ContentView: View {

????var body: some View {

????????Button(action: {

????????????// 點擊按鈕后的操作

????????????print("Button tapped!")

????????}) {

????????????Text("Tap me!")

????????????????.font(.title)

????????????????.foregroundColor(.white)

????????????????.padding()

????????????????.background(Color.blue)

????????????????.cornerRadius(10)

????????}

????}

}

4.3.2?按鈕樣式和修飾

自定義按鈕樣式

可以通過添加不同的修飾符來自定義按鈕的外觀和行為。

Button(action: {

????// 點擊按鈕后的操作

}) {

????HStack {

????????Image(systemName: "person.fill")

????????Text("Login")

????????????.fontWeight(.semibold)

????}

????.padding()

????.foregroundColor(.white)

????.background(Color.green)

????.cornerRadius(8)

????.shadow(radius: 5)

}

動態(tài)按鈕

可以根據(jù)視圖狀態(tài)來動態(tài)更改按鈕的標簽或樣式。

struct ContentView: View {

????@State private var isLogged = false

????

????var body: some View {

????????Button(action: {

????????????self.isLogged.toggle()

????????}) {

????????????Text(isLogged ? "Logout" : "Login")

????????????????.fontWeight(.semibold)

????????????????.padding()

????????????????.foregroundColor(.white)

????????????????.background(isLogged ? Color.red : Color.blue)

????????????????.cornerRadius(8)

????????}

????}

}

4.3.3?按鈕響應和動作

每個按鈕都需要一個操作(action),當用戶點擊按鈕時,這個操作會被觸發(fā)。操作通常是一個閉包,用于定義按鈕點擊后的行為。

Button(action: {

????print("Button tapped!")

}) {

????Text("Tap me!")

}

???????5.?列表和導航

5.1?列表視圖(List)

List?是一個用于顯示可滾動的內(nèi)容列表的視圖組件。List?適用于展示動態(tài)和靜態(tài)數(shù)據(jù),它支持多種自定義選項和交互功能。下面是對?List?視圖的詳細介紹,包括基本用法、動態(tài)數(shù)據(jù)展示和自定義樣式。

5.1.1?基本用法

要創(chuàng)建一個簡單的列表視圖,您只需將視圖內(nèi)容傳遞給?List??梢杂渺o態(tài)內(nèi)容或動態(tài)數(shù)據(jù)來填充列表項。

靜態(tài)內(nèi)容

struct ContentView: View {

????var body: some View {

????????List { // 顯示了三個列表項

????????????Text("Item 1")

????????????Text("Item 2")

????????????Text("Item 3")

????????}

????}

}

???????

5.1.2?動態(tài)數(shù)據(jù)

通常情況下,List?用于展示動態(tài)數(shù)據(jù),您可以將數(shù)據(jù)綁定到?List?中,從而實現(xiàn)數(shù)據(jù)驅(qū)動的UI更新。

基本動態(tài)數(shù)據(jù)

struct ContentView: View {

????let items = ["Item 1", "Item 2", "Item 3", "Item 4"]

????

????var body: some View {

????????List(items, id: \.self) { item in

????????????Text(item)

????????}

????}

}

使用自定義數(shù)據(jù)模型

struct Item: Identifiable {

????var id = UUID()

????var name: String

????var detail: String

}

struct ContentView: View {

????let items = [

????????Item(name: "Item 1", detail: "Detail 1"),

????????Item(name: "Item 2", detail: "Detail 2"),

????????Item(name: "Item 3", detail: "Detail 3")

????]

????

????var body: some View {

????????List(items) { item in

????????????VStack(alignment: .leading) {

????????????????Text(item.name)

????????????????????.font(.headline)

????????????????Text(item.detail)

????????????????????.font(.subheadline)

????????????}

????????????.padding()

????????}

????}

}

如果您的數(shù)據(jù)模型更加復雜,可以創(chuàng)建一個自定義的結(jié)構(gòu)體并使用它。

???????

5.1.3?自定義列表項

可以自定義每個列表項的視圖,添加更多的視圖元素和樣式。

struct Item: Identifiable {

????var id = UUID()

????var name: String

????var detail: String

}

struct ContentView: View {

????let items = [

????????Item(name: "Item 1", detail: "Detail 1"),

????????Item(name: "Item 2", detail: "Detail 2"),

????????Item(name: "Item 3", detail: "Detail 3")

????]

????

????var body: some View {

????????List(items) { item in

????????????VStack(alignment: .leading) {

????????????????Text(item.name)

????????????????????.font(.headline)

????????????????Text(item.detail)

????????????????????.font(.subheadline)

????????????}

????????????.padding()

????????}

????}

}

5.1.4?列表的交互

List?支持多種交互功能,如行的刪除、移動等。

刪除列表項

struct ContentView: View {

????@State private var items = ["Item 1", "Item 2", "Item 3"]

????

????var body: some View {

????????List {

????????????ForEach(items, id: \.self) { item in

????????????????Text(item)

????????????}

????????????.onDelete(perform: delete) // 修飾符允許用戶從列表中刪除項目

????????}

????}

????

????func delete(at offsets: IndexSet) {

????????items.remove(atOffsets: offsets)

????}

}

移動列表項

struct ContentView: View {

????@State private var items = ["Item 1", "Item 2", "Item 3"]

????

????var body: some View {

????????List {

????????????ForEach(items, id: \.self) { item in

????????????????Text(item)

????????????}

????????????.onMove(perform: move) // 修飾符允許用戶移動列表中的項目

????????}

????????.navigationBarItems(trailing: EditButton()) // 進入編輯模式的按鈕

????}

????

????func move(from source: IndexSet, to destination: Int) {

????????items.move(fromOffsets: source, toOffset: destination)

????}

}

5.2?導航視圖(NavigationView)

NavigationView?是用于在應用程序中創(chuàng)建導航層次結(jié)構(gòu)的視圖容器。它允許用戶通過導航鏈接(NavigationLink)在不同的視圖之間切換,并提供了導航欄的功能,如標題、按鈕和其他交互元素。下面是對?NavigationView?的詳細介紹,包括基本用法、導航鏈接、以及自定義導航欄。

5.2.1?基本用法

NavigationView?包裹在其他視圖的外層,提供導航和管理導航層次結(jié)構(gòu)的功能。

struct ContentView: View {

????var body: some View {

????????NavigationView {

????????????Text("Welcome to SwiftUI")

????????????????.navigationTitle("Home")

????????}

????}

}

5.2.2?導航鏈接

NavigationLink?用于在視圖之間創(chuàng)建導航鏈接。當用戶點擊鏈接時,會推送目標視圖到導航堆棧中。

基本導航鏈接

struct ContentView: View {

????var body: some View {

????????NavigationView {

????????????VStack {

????????????????NavigationLink(destination: DetailView()) { //創(chuàng)建了一個可以點擊的區(qū)域,點擊時會導航到 DetailView

????????????????????Text("Go to Detail View")

????????????????}

????????????????.padding()

????????????}

????????????.navigationTitle("Home")

????????}

????}

}

struct DetailView: View { //顯示了一個簡單的文本,并設置了導航欄標題為 "Detail"

????var body: some View {

????????Text("This is the detail view")

????????????.navigationTitle("Detail")

????}

}

導航鏈接與數(shù)據(jù)

還可以通過導航鏈接傳遞數(shù)據(jù)到目標視圖。

???????

struct ContentView: View {

????let items = ["Item 1", "Item 2", "Item 3"]

????

????var body: some View {

????????NavigationView {

????????????List(items, id: \.self) { item in

????????????????NavigationLink(destination: DetailView(item: item)) {

????????????????????Text(item)

????????????????}

????????????}

????????????.navigationTitle("Items")

????????}

????}

}

struct DetailView: View {// 接受一個 item 參數(shù),通過 NavigationLink 將選中的項傳遞到目標視圖。

????let item: String

????

????var body: some View {

????????Text("Detail for \(item)")

????????????.navigationTitle(item)

????}

}

5.2.3?自定義導航欄

NavigationView?提供了一些方法來定制導航欄的外觀和行為,例如添加按鈕或修改標題。

添加導航欄按鈕

struct ContentView: View {

????var body: some View {

????????NavigationView {

????????????VStack {

????????????????Text("Welcome to SwiftUI")

????????????}

????????????.navigationTitle("Home")

????????????.navigationBarItems(trailing: Button(action: {

????????????????// 右側(cè)按鈕的動作

????????????????print("Edit tapped")

????????????}) {

????????????????Image(systemName: "pencil")

????????????})

????????}

????}

}

使用自定義視圖作為導航欄標題

可以使用自定義視圖作為導航欄標題,以實現(xiàn)更多樣的設計。

struct ContentView: View {

????var body: some View {

????????NavigationView {

????????????VStack {

????????????????Text("Welcome to SwiftUI")

????????????}

????????????.navigationTitle("Home")

????????????.navigationBarTitleDisplayMode(.inline)

????????????.navigationBarItems(leading: HStack {

????????????????Image(systemName: "star.fill")

????????????????Text("Favorites")

????????????})

????????}

????}

}

5.2.4?導航欄樣式

可以調(diào)整導航欄的樣式,例如背景顏色、透明度等。

???????

struct ContentView: View {

????init() {

????????UINavigationBar.appearance().backgroundColor = UIColor.systemTeal

????????UINavigationBar.appearance().largeTitleTextAttributes = [.foregroundColor: UIColor.white]

????}

????

????var body: some View {

????????NavigationView {

????????????VStack {

????????????????Text("Welcome to SwiftUI")

????????????}

????????????.navigationTitle("Home")

????????????.navigationBarTitleDisplayMode(.large)

????????}

????}

}

柚子快報邀請碼778899分享:ios SwiftUI入門篇

http://yzkb.51969.com/

相關(guān)閱讀

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19435732.html

發(fā)布評論

您暫未設置收款碼

請在主題配置——文章設置里上傳

掃描二維碼手機訪問

文章目錄