我一直在阅读 SwiftUI 中的属性包装器,我看到它们做得很好,但我真正不明白的一件事是@EnvironmentObject和@ObservedObject之间的区别。
从我到目前为止所学到的,我看到@EnvironmentObject在我们的应用程序的各个地方都需要一个对象时使用,但我们不需要通过所有这些地方传递它。例如,如果我们有层次结构 A -> B -> C -> D 并且对象是在 A 处创建的,那么它会保存在环境中,以便我们可以将它直接从 A 传递到 D,如果 D 需要的话。
如果我们使用在 A 创建并需要传递给 D 的@ObservedObject,那么我们也需要通过 B 和 C。
但我仍然不知道如何决定使用哪一个。以下是我制作的 2 个示例项目:
struct ContentView2: View {
var order = Order2()
var body: some View {
VStack {
EditView2()
DisplayView2()
}
.environmentObject(order)
}
}
struct EditView2: View {
@EnvironmentObject var user: Order2
var body: some View {
HStack{
TextField("Fruit", text: $user.item)
}
}
}
struct …
Run Code Online (Sandbox Code Playgroud) 我正在 swift 开发一个应用程序,我必须将用户的当前位置与从 JSON 文件中获取的其他位置进行比较。然后我必须显示距离用户位置一定范围内的所有位置。我从 UISlider 中获取的这个范围。我的意思是当用户在滑块中选择 25km 时,应用程序必须确定当前用户的位置并显示该范围内的所有水果。
import UIKit
import SwiftyJSON
import MapKit
import CoreLocation
class TableViewController: UITableViewController,CLLocationManagerDelegate {
@IBOutlet weak var Bar: UIToolbar!
@IBOutlet weak var LabelTest: UILabel! // this is the slider value, I segue it from the previous viewcontroller
var manager = CLLocationManager()
struct Fruit {
let name : String
let location : CLLocation
let imageURL : NSURL
let description : String
}
var fruits = [Fruit]()
func parseFruits() {
guard let url = NSBundle.mainBundle().URLForResource("cities", …
Run Code Online (Sandbox Code Playgroud) 这些天我一直在玩 Lottie 动画,但是我在如何从视图中阻止它们时遇到了一些麻烦。
这是我的 ContentView,我在其中播放动画。我有一个按钮可以实时显示布尔值:
struct ContentView: View {
@State var isShowing : Bool = true
var body: some View {
ZStack {
Color.green.opacity(0.3)
VStack {
VStack {
LottieDosi(isShowing: .constant(isShowing)){Text("")}
Button(action: {self.isShowing.toggle()}) {
Text("Button is \(String(isShowing))")
.padding(10)
.background(Color.white)
.cornerRadius(40)
}
}.padding(.horizontal, 30)
}
}.edgesIgnoringSafeArea(.all)
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的 LottieView:
struct LottieView: UIViewRepresentable {
@Binding var isAnimating: Bool
@State var name : String
var loopMode: LottieLoopMode = .loop
var animationView = AnimationView()
func makeUIView(context: UIViewRepresentableContext<LottieView>) -> UIView {
let view = UIView() …
Run Code Online (Sandbox Code Playgroud) 我是Swift的初学者,想为我的第一个应用程序提供一些帮助.我希望我能很好地解释它.我正在开发和应用程序,它从JSON文件加载信息.您是否有人知道如何将此信息填充到UI表视图单元格中.我开发了3个视图控制器,在第一个我有一个按钮,用户必须按下,第二个Tableview控制器将被打开.我已经看过如何填充它的教程,但似乎它不起作用.第三个是Table View Cells.let我告诉你:
class TableViewController: UITableViewController {
@IBOutlet weak var Bar: UIToolbar!
var TableData:Array< String > = Array < String >()
let ImageList = ["",""]
var TitleList = ["",""]
let DescriptionList = ["",""]
Run Code Online (Sandbox Code Playgroud)
我必须在单元格中显示图像,标题和描述.这是JSON文件:
{
“fruits” : [
{
“Name” : “Fruit1”,
“Picture”:”http://www.starpropertiesindia.com/blog/wp- content/uploads/2016/08/kochi1.jpg”,
“Description”:””,
},
{
“Name” : “Fruit2”,
“Picture”:”http://www.starpropertiesindia.com/blog/wp-content/uploads/2016/08/kochi1.jpg”,
“Description”:””,
},
Run Code Online (Sandbox Code Playgroud)
如果有人建议我如何继续,我将非常感激..
在新视图中准备segue:
@IBOutlet weak var CellDescription: UILabel!
@IBOutlet weak var CellImage: UIImageView!
@IBOutlet weak var CellTitle: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
Run Code Online (Sandbox Code Playgroud) 我在 SwiftUI 中使用 .sheet 视图,并且在代码执行中观察到奇怪的行为。
我正在查看 SignInView2:
struct SignInView2: View {
@Environment(\.presentationMode) var presentationMode
@State var invitationUrl = URL(string: "www")
@State private var showingSheet = false
var body: some View {
VStack {
Text("Share Screen")
Button(action: {
print("link: \(invitationUrl)") // Here I see the new value assigned from createLink()
self.showingSheet = true
}) {
Text("Share")
}
.sheet(isPresented: $showingSheet) {
let invitationLink = invitationUrl?.absoluteString // Paasing the old value (www)
ActivityView(activityItems: [NSURL(string: invitationLink!)] as [Any], applicationActivities: nil)
}
}
.onAppear() { …
Run Code Online (Sandbox Code Playgroud) 我是Swift初学者,刚刚在我的应用程序中完成了我的照相机功能.我现在遇到的问题是,当我从相机拍摄照片时,它不会保存到我的iPhone上的照片库中.一切都很完美,我可以拍照,但是当我查看照片时,似乎没有保存.我检查了类似的问题,但我没有找到正确的答案,我发现他们是添加按钮直接访问照片库的人,但我不需要这样的按钮.唯一的功能,我需要拍照,当用户点击选择照片将其保存在照片中.
到目前为止我用过这个:
class ViewController: UIViewController, UIImagePickerControllerDelegate,UINavigationControllerDelegate{
let imagePicker: UIImagePickerController! = UIImagePickerController()
override func viewDidLoad() {
super.viewDidLoad()
imagePicker.delegate = self
let upSwipe = UISwipeGestureRecognizer(target: self, action: #selector(handleSwipes))
upSwipe.direction = .up
view.addGestureRecognizer(upSwipe)
}
Run Code Online (Sandbox Code Playgroud)
和功能:
func handleSwipes(sender:UISwipeGestureRecognizer) {
if (sender.direction == .up){
if ( UIImagePickerController.isSourceTypeAvailable(.camera)){
if UIImagePickerController.availableCaptureModes(for: .rear) != nil {
imagePicker.allowsEditing = false
imagePicker.sourceType = .camera
imagePicker.cameraCaptureMode = .photo
present(imagePicker,animated: true, completion: {})
}
}
Run Code Online (Sandbox Code Playgroud)