SwiftUI1000问(51-100)

Posted 飞鱼UI研习社

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SwiftUI1000问(51-100)相关的知识,希望对你有一定的参考价值。

题目51:

完成一个悬浮在屏幕右下角距屏幕右侧和底部各20个单位的蓝色"+"按钮。

struct Button : View { var body : some view{ GeometryReader{geo in ZStack{ //从底部写起 circle() .foregroundColor(Color.blue) .frame(width:70,height:70) Image(systemName:"plus") .resizable() .aspectRatio(contentMode: .fit) } .offset(x:geo.size.width - 20, y:geo.size.height - 20) } }}

题目52:

请完成如下效果的代码,当点击蓝色按钮时,图标转动并弹出子按钮,点击左右图标时,切换到不同的视图。

struct ContentView: View{@State var showPopUp = false var body: some view{//GeometryReader会读取它的父视图的尺寸,动态确定tabbar的位置,这里就是全屏幕的尺寸。 GeometryReader{geometry in VStack{ //两个Spacer()确保Text()一直在中间 Spacer() if self.viewRouter.currentView == "home" { Text("Home") } else if self.viewRouter.currentView == "settings" { Text("Settings") } Spacer()ZStack{if self.showPopUp { PlusMenu() }.offset(y: -geometry.size.height/6).onTapGesture {withAnimation { self.showPopUp.toggle()}} HStack{ Image(systemName: "house") .resizable() .aspectRatio(contentMode: .fit) .padding(20) .frame(width: geometry.size.width/3, height: 75) .foregroundColor(self.viewRouter.currentView == "home" ? .black : .gray) .onTapGesture { self.viewRouter.currentView = "home" }}ZStack { Circle() .foregroundColor(Color.white) .frame(width: 75, height: 75) Image(systemName: "plus.circle.fill") .resizable() .aspectRatio(contentMode: .fit) .frame(width: 75, height: 75) .foregroundColor(.blue) .rotationEffect(Angle(degrees: self.showPopUp ? 90 : 0)) }.offset(y: -geometry.size.height/10/2) Image(systemName: "gear") .resizable() .aspectRatio(contentMode: .fit) .padding(20) .frame(width: geometry.size.width/3, height: 75) .foregroundColor(self.viewRouter.currentView == "settings" ? .black : .gray) .onTapGesture { self.viewRouter.currentView = "settings" } } .frame(width: geometry.size.width, height: geometry.size.height/10) .background(Color.white.shadow(radius: 2)) } }.edgesIgnoringSafeArea(.bottom) }}struct PlusMenu: View { var body: some View { HStack(spacing: 50) { ZStack { Circle() .foregroundColor(Color.blue) .frame(width: 70, height: 70) Image(systemName: "camera") .resizable() .aspectRatio(contentMode: .fit) .padding(20) .frame(width: 70, height: 70) .foregroundColor(.white) } ZStack { Circle() .foregroundColor(Color.blue) .frame(width: 70, height: 70) Image(systemName: "photo") .resizable() .aspectRatio(contentMode: .fit) .padding(20) .frame(width: 70, height: 70) .foregroundColor(.white) } }.transition(.scale) }}

题目53:

请完成如下效果的代码。

SwiftUI1000问(51-100)

struct ContentView: View { var body: some View { ZStack(alignment: .bottomTrailing){ Rectangle() .foregroundColor(.clear) .frame(maxWidth: .infinity,maxHeight: .infinity) FloatingButton() .padding() } }}struct FloatingButton: View {
@State var showMenuItem1 = false @State var showMenuItem2 = false @State var showMenuItem3 = false
var body: some View { VStack { Spacer() if showMenuItem1{ MenuItem(icon: "camera.fill") } if showMenuItem2{ MenuItem(icon: "photo.on.rectangle") } if showMenuItem3{ MenuItem(icon: "square.and.arrow.up.fill") } //.shadow(color:.gray, radius: 0.2,x:1,y:1) Button(action:{ self.showMenu() }) { Image(systemName: "plus.circle.fill") .resizable() .frame(width:80,height: 80) .foregroundColor(Color("mainColor")) .shadow(color:.gray, radius: 0.2,x:1,y:1) } }
} func showMenu(){ withAnimation{showMenuItem3.toggle()}
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { self.showMenuItem2.toggle() } DispatchQueue.main.asyncAfter(deadline: .now() + 0.2) { self.showMenuItem1.toggle() }
}}struct FloatingButton_Previews: PreviewProvider { static var previews: some View { FloatingButton() }}struct MenuItem: View {
var icon: String
var body: some View { ZStack{ Circle() .foregroundColor(Color("smallButton")) .frame(width:55,height: 55) Image(systemName: icon) .imageScale(.large) .foregroundColor(.white) } .transition(.move(edge: .trailing)) }}

二、新建一个Swift文件,并写进如下代码:

import Foundationimport SwiftUIimport Combineclass ViewRouter: ObservableObject {
@Published var currentView = "home"
}struct ContentView: View {
@ObservedObject var viewRouter = ViewRouter()
var body: some View { //... }}

题目54:

如何控制文字显示行数为2行?无限制行数显示又该如何设置?

.lineLimit(2)//最多显示两行.lineLimit(nil)//无限行

题目55:

对可选类型进行解包有几种方式?并用相关列子来说明。

对可选类型进行解包就是将可选类型中的值解析出来,一般有三种方式,

一是如果确定可选类型的值不为空的话可以进行强制解包:

var someOptional: String? = "Swift"print("该可选类型的值为:\(someOptional!)")二是 用if语句判断解包:var someOptional: String? = "Swift"if(someOptional){ print("该可选类型的值为:\(someOptional!)")}else{ print("该可选类型的值为nil")}三是 用 使用guard语句解包:var someOptional: String? = "Swift"//guard的意思就是拦截,如果符合条件就直接跳过guard语句进行下面的操作guard(someOptional == nil){ print("该可选类型的值为nil")}

题目56:

SwiftUI中动画效果可以分为哪几种?如何实现?

可以分为两种,隐式动画和显示动画。隐式动画使用.animation修饰符实现,显示动画使用withAnimation{}实现。

题目57:

请解释以下扩展代码的含义。

extension Character { enum Kind { case Vowel, Consonant, Other } var kind: Kind { switch String(self).lowercaseString { case "a", "e", "i", "o", "u": return .Vowel case "b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "v", "w", "x", "y", "z": return .Consonant default: return .Other } }}

该例子向Character添加了新的嵌套枚举。这个名为Kind的枚举表示特定字符的类型。具体来说,就是表示一个标准的拉丁脚本中的字符是元音还是辅音(不考虑口语和地方变种),或者是其它类型。这个类子还向Character添加了一个新的计算实例属性,即kind,用来返回合适的Kind枚举成员。现在,这个嵌套枚举可以和一个Character值联合使用了。

题目58:

文字的行间距如何调整?

.lineSpacing(4)

题目59:

什么是计算属性?请写出一个例子并作出说明。

计算属性不直接存储数据,而是从其它存储属性中计算得到数据,例如:

class Employee { var no:Int = 0 var firstName:String = "" var lastName:String = "" var job:String? var salary:Double = 0 lazy var dept:Department = Department() //这里的fullname就是计算属性 var fullname:String{ get{                return firstName+"."+"lastName"}             }}

题目60:

什么是UserDefaults?如何使用UserDefaults存储数据,请举例说明。

一般ios应用都会在应用启动时加载已存储的少量的用户设置和偏好,这些数据都是提前存好的,对于这种类型数据一般使用 UserDefaults 进行存储。

可以存储的类型有:数字(Int, Float, Double),字符串,布尔值,数组,字典,日期, Data, URL等。

let defaults = UserDefaults.standard// 存储// 数字defaults.set(20, forKey: "Age")defaults.set(CGFloat.pi, "PI")// 字符串defaults.set("James", forKey: "name")// 布尔值defaults.set(true, forKey: "isMale")// 日期defaults.set(Date(), forKey: "timestamp")// 数组let arr = ["apple", "banana"]defaults.set(arr, forKey: "fruit")// 字典let info = ["country": "china", "name": "james"]defaults.set(info, forKey: "INFO")读取相应值时需要对应的字符串值// 读取let defaults = UserDefaults.standard// 数字的读取 defaults.integer | defaults.float | defaults.doubledefaults.integer(forKey: "Age")defaults.double(forKey: "PI")// 字符串读取defaults.string(forKey: "name")// 布尔值读取defaults.bool(forKey: "isMale")// 对 Date, 数组, 字典的读取,一般使用// defaluts.object(forKey:) -> Any?// 因为数组和字典返回类型分别是 [Any]? , [String: Any]?// 而object返回的是 Any?// 可以自定义转换的类型defaults.object(forKey: "timestamp") as? Double ?? 0defaults.object(forKey: "fruit") as? [String] ?? [String]()// 将获取的字典转换为[String:String]类型// 如果获取的字典为nil,则给一个默认字符串字典defaults.object(forKey: "INFO") as? [String:String] ?? [String:String]()

题目61:

使用UserDefaults读取数据时,如果值不存在,则会返回默认值,不同数据类型的默认值有哪些?

使用 UserDefaults 读取时,如果key不存在,则会返回一个默认值:

integer(forKey:): 如果key存在则返回一个数字类型,如果不存在则返回 0

bool(forKey:): 如果key存在则返回一个布尔值,如果不存在则返回 false

float(forKey:) | double(forKey:): 如果key存在则返回一个浮点数,如果不存在则返回 0.0

object(forKey): 会返回 AnyObject?, 因此你需要自定义转换为你想要的返回类型,比如上面的 UserDefaults.standard.object(forKey: "INFO"), 自定义返回类型为 [String: String], 如果 INFO key 不存在,则给一个默认的空字符串字典 [String:String]()

题目62:

在APP开发中,遇到需要存储大量数据的情况,有哪些解决方案?

对于大量数据一般使用数据库进行存储,比如:

  • SQLite

  • fmdb

  • realm

  • Core Data

对于结构比较复杂的数据存储,一般会涉及到下面知识:

  • NSKeyedArchiver & NSkeyedUnarchiver:如果对象是一个属于使用了NSCoding协议的Cocoa类, 可以将数据进行归档(使用NSKeyedArchiver),将数据转换为 Data 类型,然后再使用 UserDefaults 进行存储

  • Codable 协议:swift新的序列化方式,如果是自定义class,则可以让自定义的class遵循 Codable 协议,然后使用 PropertyListEncoder 对其进行归档

  • NSCoding| NSSecureCoding:Cocoa Foundation框架中的大部分类采用这个协议,一般使用 NSKeyedArchiver 将对象转换为 NSData类型,使用时,再使用 NSKeyedUnarchiver 将其还原

  • JSONEncoder & JSONDecoder

题目63:

如何使用UIImagePickerController来操控相机及相册的使用?

//声明一个类型为UIImagePickerController类型的变量var cameraPicker: UIImagePickerController! = nil//相机功能func cameraShow(){ //是否有相机设备 if UIImagePickerController.isValidCameraEnable{ //是否支持相机 if UIImagePickerController.isValidCamera{ //是否支持图片库 if self.cameraPicker == nil{ self.cameraPicker = UIImagePickerController() self.cameraPicker.sourceType = .camera self.cameraPicker.delegate = self self.cameraPicker.setImagePickerStyle(UIColor.yellow(), titleColor.redColor(), buttonTitleColor: UIColor.blackColor()) } self.presentViewController(self.cameraPicker, animated: true, completion: nil) }else{ print("相机打开失败") } }else{ print("没有相机设备")}}

题目64:

什么是UIImagePickerController?

UIImagePickerController是UIKit框架下的一个类, 我们可以用UIImagePickerController选择我们所需要的图片和视频。

题目65:

UIImagePickerController下有哪些sourceType属性?

有三种sourceType属性,分别是照相机、相册和照片库。

enum {UIImagePickerControllerSourceTypePhotoLibrary,UIImagePickerControllerSourceTypeCamera,UIImagePickerControllerSourceTypeSavedPhotosAlbum}

题目66:

使用UIImagePickerController来操控相机及相册需要哪几个步骤?

UIImagePickerController 类来获取图片视频,大体分为以下几个步骤:

1. 初始化UIImagePickerController 类;

2. 设置UIImagePickerController 实例的数据来源类型(下面解释);

3. 设置代理;

4. 如果需要做图片修改的话设置allowsEditing =yes。

题目67:

什么是UIImageView?

UIImageView是一个加载图片的视图,和UILabel一样,都是继承于UIView的。和UILabel不一样的是UILabel是用来显示文字,而UIImageView是用来加载图片的,所有图片都需要放置在UIImageView上才能被加载出来。

题目68:

使用UIImagePickerController来操控相机及相册,具体代码如何写?

class ImageController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate{//图片展示@IBOutlet weak var image: UIImageView!var takingPicture:UIImagePickerController!//点击按钮弹出拍照、相册的选择框@IBAction func getImage(_ sender: Any) {let actionSheetController = UIAlertController()let cancelAction = UIAlertAction(title: "取消", style: UIAlertAction.Style.cancel) { (alertAction) -> Void inprint("Tap 取消 Button")}let takingPicturesAction = UIAlertAction(title: "拍照", style: UIAlertAction.Style.destructive) { (alertAction) -> Void inself.getImageGo(type: 1)}let photoAlbumAction = UIAlertAction(title: "相册", style: UIAlertAction.Style.default) { (alertAction) -> Void in self.getImageGo(type: 2)}actionSheetController.addAction(cancelAction)actionSheetController.addAction(takingPicturesAction)actionSheetController.addAction(photoAlbumAction)//iPad设备浮动层设置锚点actionSheetController.popoverPresentationController?.sourceView = sender as? UIView//显示self.present(actionSheetController, animated: true, completion: nil)}override func viewDidLoad() {super.viewDidLoad()// Do any additional setup after loading the view.}//去拍照或者去相册选择图片func getImageGo(type:Int){takingPicture = UIImagePickerController.init()if(type==1){takingPicture.sourceType = .camera//拍照时是否显示工具栏//takingPicture.showsCameraControls = true}else if(type==2){takingPicture.sourceType = .photoLibrary}//是否截取,设置为true在获取图片后可以将其截取成正方形takingPicture.allowsEditing = falsetakingPicture.delegate = selfpresent(takingPicture, animated: true, completion: nil)}//拍照或是相册选择返回的图片func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {takingPicture.dismiss(animated: true, completion: nil)if(takingPicture.allowsEditing == false){//原图image.image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage}else{//截图image.image = info[UIImagePickerController.InfoKey.editedImage] as? UIImage}}
题目69:

通俗的解释什么是MVC框架模式?有什么优点?

MVC即model(模型)、view(视图)和controller(控制器)的缩写,是一种软件设计模式,专用于含有图形化用户界面的软件设计,自20世纪80年代以来已经有30多年的历史了。MVC具体指的是:将图形化软件切分成model、view和controller共3个部分:

model:负责数据动态管理和软件业务逻辑,接收来自controller的操作,并将结果及时传递给view。

view:直接呈现在用户面前的信息,比如一张图片或一段文字。

controller:接收来自用户的输入,并转换成相应的命令交给model。

用图片表示最直接:

SwiftUI1000问(51-100)

MVC的优点是:3个部分各司其职、责任明确且耦合性低,很大程度上降低了软件复杂性,从而提高了软件的质量以及开发效率。

题目70:

在MVC模式中,UIViewController代表哪个部分?

UIViewController扮演的正是MVC中的controller。

题目71:

以下SwiftUI中的视图控件与UIKit的对照关系分别是什么?

SwiftUI

UIKit

List

UITableView

没有类似

UICollectionView

Text

UILabel

TextField

UITextField

SecureField

UITextField的isSecureTextEntry=true

没有类似

UITextView

Toggle

UISwitch

Slider

UISlider

Button

UIButton

NavigationView

UINavigationController

Alert

UIAlertController的style为.alert

ActionSheet

UIAlertController的style为.actionSheet

HStack

UIStackView水平排列时

VStack

UIStackView 垂直排列时

Image

UIImageView

SegmentedControl

UISegmentedControl

Stepper

UIStepper

DatePicker

UIDatePicker

没有类似,用Text代替

NSAttributedString

题目72:

如何在SwiftUI中创建UIKit视图和视图控制器?

import SwiftUIimport UIKitstruct PageViewController: UIViewControllerRepresentable { var controllers: [UIViewController]}

题目73:

如何使用require关键字?

方法之前加require关键字之后,所有继承该类的子类都要重新实现该方法。

题目74:

SwiftUI1000问(51-100)

struct OtherTabView: View {
@State var showPopUp = false
var body: some View { //GeometryReader会读取它的父视图的尺寸,动态确定tabbar的位置,这里就是全屏幕的尺寸。 GeometryReader{geometry in VStack{ //两个Spacer()确保Text()一直在中间 Spacer()// if self.viewRouter.currentView == "home" {// Text("Home")// } else if self.viewRouter.currentView == "settings" {// Text("Settings")// } Text("Home") Spacer() ZStack{ if self.showPopUp { PlusMenu(a: ImageController()) } } .offset(y: -geometry.size.height/16) HStack{ Image("homeTab") .resizable() .aspectRatio(contentMode: .fit) .padding(20) .frame(width: geometry.size.width/3, height: 75) .foregroundColor(Color("mainColor"))// .onTapGesture {// self.viewRouter.currentView = "home" ZStack { //在上面的在下面一层 Circle() .foregroundColor(Color.white) .frame(width: 75, height: 75) Image(systemName: "plus.circle.fill") .resizable() .aspectRatio(contentMode: .fit) .frame(width: 75, height: 75) .foregroundColor(Color("mainColor")) .rotationEffect(Angle(degrees: self.showPopUp ? 90 : 0)) } .offset(y: -geometry.size.height/10/2) .onTapGesture { withAnimation { self.showPopUp.toggle() }
}
Image("listTab") .resizable() .aspectRatio(contentMode: .fit) .padding(20) .frame(width: geometry.size.width/3, height: 75) .foregroundColor(Color("mainColor")) } .frame(width: geometry.size.width, height: geometry.size.height/9)// .background(Color.white.shadow(radius: 4))                    }                    //// .onTapGesture {// self.viewRouter.currentView = "settings"// } }.edgesIgnoringSafeArea(.bottom)//// }// }// }//}

题目75:

如何实现3D效果?

GeometryReader{ geometry in CourseView() .rotation3DEffect(Angle( degrees:Double(geometry.frame(in:.global).minX)/-20 ), axis:(x:0, y:10.0,z:0) )}

题目76:

在Xcode预览里,.constant是什么意思?

.constant是一个binding类型,绑定了括号里面的值,但是无法改变,相当于一个常量,在preview里经常会用到

.constant(self.image ?? Image("") )

题目77:

SwiftUI下的NavigationView等同于UIKit下的哪个元素?对于放置于NavigationView下的元素有什么要求?

等同于UINavigationController,放入NavigationView下的必须是符合字符串协议的视图,比如Text View。

题目78:

完成如下的按钮动画效果,点击按钮,按钮旋转放大,再次点击,回复原状。

SwiftUI1000问(51-100)


struct animationView : View{@State var rotate : Bool = falsevar body : some view{Button(action: {//加到变量的变化上 withAnimation{ self.ratate.toggle() }}){ HStack{ Text("动画测试") Image(systemName: "chevron.right.circle") .frame(width: 40, height: 40, alignment: .center) //旋转动画 .rotationEffect(.degrees(rotate ? 90 : 0)) //缩放动画 .scaleEffect(rotate ? 1.5 : 1) }} }}

题目79:

如何使用修饰符更改文字大小?

除了使用系统已经自定义的修饰符更改文字大小外,还可以自定义文字大小,例如:

.font(.system(size: 25))

题目80:

完成如下视图效果:

SwiftUI1000问(51-100)

struct DataColumn: View { var color: Color    var height: CGFloat var body: some View { VStack { Spacer() RoundedRectangle(cornerRadius: 2) .fill(color) .frame(width: 4, height: height, alignment: .bottom) } }}

题目81:

都是用来调整边距的,padding()和spacing有什么区别?

padding()作为修饰符用在元素或容器上,给容器或元素frame的内部增加内边距的,spacing作为参数参数用在容器上,给容器内部元素之间增加边距,而各元素frame内的内边距没有增加。

HStack{}.padding(.top, 12)
HStack(spacing: 20){}

题目82:

swift中float与double数据类型都可以用来定义小数?它们有什么区别?

提供了两种有符号的浮点数类型,Double和Float,Float表示32位浮点数,精度要求不高的话可以使用Float类型,例如我们随便写一个小数,2.5; 双精度表示64位浮点数。当需要存储很大或者很高精度的浮点数时,请使用Double类型。

题目83:

什么是jwt?

Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519),主要的用途在用户的登录上。

题目84:

什么是同步异步

同步就是顺序执行,执行完一个再执行下一个,需要等待、协调运行。 同步就是顺序执行,执行完一个再执行下一个,需要等待、协调运行。 也就是说,前一个进程的输出作为后一个进程的输入,当第一个进程没有输出时第二个进程必须等待。

异步就是彼此独立,在等待某事件的过程中继续做自己的事,不需要等待这一事件完成后再工作。

题目85:

异步和多线程是什么关系

异步和多线程并不是一个同等关系,异步是最终目的,多线程只是我们实现异步的一种手段。换句话说,我们使用多线程来完成异步。

题目86:

SFSymbols是哪种字体的一部分?

SFSymbols是SanFrancisco字体的一部分。

题目87:

SFSymbols图标可以使用哪两种方式来设置大小?

可以使用修饰字体的修饰符.font()和.foregroundColor()来设置大小和颜色外,还可以使用修饰图片的resizable()和.padding()修饰符来调整大小。

题目88:

如何将图片和已有的数据文件,例如:drink.json放入xcode项目中?

只需要把图片拖入到Assets的列表栏中即可。创建好的数据文件例如:drink.json也只需要拖入到最左侧的项目列表中即可使用。

题目89:

SwiftUI1000问(51-100)


var plans: [String] = ["计划1","计划2","计划3","计划4"]@Binding var showPlan : Bool = falseNavigationView{ List(plans){item in Toggle(isON: $showPlan){ Text(“附加计划") } Text(plans[item]) } .navigationBarTitle(“设置页面")}


题目90:

完成如下图所示的界面,当用户点击按钮后图片消失,再点击图片显示。

@State var showAndHide : Bool = falseVStack(spacing: 50){ if showAndHide{ Image("SwiftUI") .resizable() .aspectRatio(contentMode:.fill) .frame(width:170, height:170) .clipped() .padding(.top,180) } Spacer()VStack(aligment:.leading,spacing: 10){  Text("I Love SwiftUI") .font(.largeTitle) .foreground(Color(.blue)) Text("SwiftUI makes developing iOS apps super easy and fast.") .font()} .frame(width:300, height:100)
Button(action:{self.showAndHide.toggle()}) { Text("Show me the logo!") .padding() .background(Color.blue) .cornerRadius(10) .foregroundColor(.white)
} .padding(.bottom,130)}

题目91:

SFSymbols是从何时内置于系统中的?

SFSymbols是从iOS 13和macOS10.15开始内置于系统中的。

题目92:

什么是Combine框架?它和SwiftUI是什么关系?

Combine是由纯Swift编写的基于响应式编程,用于处理数据流的框架。SwiftUI依赖Combine来进行背后的数据处理工作。SwiftUI和Combine都是首批Swift系统及框架。

题目93:

请完成图片点击放大、两个手指缩放、三个手指拖拽的效果。

import SwiftUIstruct ContentView: View { @GestureState private var dragOffset = CGSize.zero @State private var position = CGSize.zero @State private var scale: CGFloat = 1.0

var body: some View { Image("1") .resizable() .aspectRatio(contentMode: .fit) .offset(x: position.width + dragOffset.width, y: position.height + dragOffset.height) .animation(.easeInOut) .scaleEffect(scale)
// 缩放 .gesture(MagnificationGesture() .onChanged { value in self.scale = value.magnitude } ) // 拖拽 .gesture( DragGesture() .updating($dragOffset, body: { (value, state, transaction) in
state = value.translation }) .onEnded({ (value) in self.position.height += value.translation.height self.position.width += value.translation.width }) ) //点击放大 .gesture( TapGesture() .onEnded { _ in self.scale += 0.1 print("\(self.scale)") } )


}}

题目94:

要将文字变成粗体,需要使用哪个修饰符?

//需要使用.fontWeight修饰符,其中的.black还可以替换为.bold等参数,但从效果上来看.black修饰的文字效果是最粗的。

.fontWeight(.black)

题目95:

请通俗的解释什么闭包?闭包主要的额用途有哪些?

闭包就是匿名函数,Swift允许我们像字符串和整数一样使用函数。具体来说,你可以创建一个函数然后把它赋给一个变量,利用那个变量来调用函数。你甚至可以把函数作为参数传给另一个函数。

函数的这种用法被称为闭包 

在使用方面,我们可用swift的闭包来定义变量的值,其实就是用闭包的形式写一个计算属性。例如:

//可以在闭包中设置get、set、willset、didiset方法。var someString : String ={ return "a string"}()//可以直接省略等号和参数括号var someString : String{ return "a String"}

题目96:

.border(边框)修饰符如何使用?

//边框为红色,1个单位宽度.border(Color.red, width: 1)

题目97:

旋转动画效果如何实现?

使用.rotationEffect修饰符来实现。

.rotationEffect(.degrees(90))

题目98:

.animation除了线性的效果之外,还有哪些效果?

除了线性效果外,还包括 .easeIn(一开始慢,之后变快).easeOut(一开始快,之后变慢).easeInOut(开始结束都慢)和.timingCurve效果。

题目99:

创建一个按钮,每点击按钮一次,按钮放大一倍,并给缩放过程加上动画。

//用scale来实现缩放@State var scale : CGFloat = 1Button(action:{ self.scale += 1}){ Text("点击")} .scaleEffect(scale)//.animation只是用来定义动画效果的,比如线性、3秒钟等 .animation(.linear(duration: 3))

题目100:

如何让图片平铺满整个容器?

Image("YourImage") .resizable(capInsets: EdgeInsets(top: 20, leading: 20, bottom: 20, trailing: 20), resizingMode: .tile)



以上是关于SwiftUI1000问(51-100)的主要内容,如果未能解决你的问题,请参考以下文章

Python浮动到int转换

问:Form 和 TextField [SwiftUI] 上的错误

如何在 SwiftUI 中获取已删除文件的文件名?

SwiftUI 参数传递给不带参数的调用

问一下100以内的奇数和偶数分别相加起来和是多少?

如何增加 SwiftUI 选择器中显示的最大行数?