小编ahe*_*eze的帖子

如何解决 Swift Playgrounds 中的“运行此页面时出现问题”消息?

我正在尝试使用 SceneKit 为 WWDC 学生挑战赛做一些事情,这要求我的项目在 Swift 游乐场中。我不断收到“运行此页面时出现问题”的消息。它不提供错误消息。它只是建议检查我的代码或重新开始。我曾尝试单独删除代码段,但找不到此问题的根源。我还尝试在 man Xcode playground 中运行它,它提供了警告,我引用“操场无法继续运行,因为操场源代码做到了”。我被困住了。我的代码有什么问题。

import UIKit
import SceneKit
import QuartzCore 
import PlaygroundSupport

class GameScene: UIViewController, SCNSceneRendererDelegate {
    var primaryView: SCNView!
    var primaryScene: SCNScene!
    var cameraNode: SCNNode!
    
    override func viewDidLoad() {
        sceneAndViewInit()
        cameraInit()
        createGround()
        moonInit()
    }
    
    func createGround() {
        var ground = SCNBox(width: 200, height: 1, length: 200, chamferRadius: 0)
        var groundPhysicsShape = SCNPhysicsShape(geometry: ground, options: nil) 
        var groundNode = SCNNode(geometry: ground)
        ground.firstMaterial?.diffuse.contents = UIColor.orange
        ground.firstMaterial?.specular.contents = UIColor.white
        groundNode.position = SCNVector3(0, -6, 0)
        groundNode.physicsBody …
Run Code Online (Sandbox Code Playgroud)

scenekit swift swift-playground

5
推荐指数
2
解决办法
534
查看次数

SwiftUI 无法在 iOS 13 版本中使用 navigationBarTitle 修饰符(已弃用),但可以在 iOS 14 中使用

我将最低部署目标从 iOS 14.0 降低到 iOS 13.0。然后我得到了这个错误:

'navigationBarTitle(_:displayMode:)' 仅适用于 iOS 14.0 或更新版本

'navigationBarTitle(_:displayMode:)' 仅适用于 iOS 14.0 或更新版本

但是,文档说它可以从 iOS 13.0-14.2 获得,并且之前发布的SO答案(回到 iOS 13 是最新版本时)也使用了它。

是不是因为它“已弃用”而无法使用它?但是为什么我可以在 iOS 14.0 中使用它呢?


编辑:

尝试复制后,它似乎只有在我没有title存储在属性中时才有效。

比较是否在属性中存储“标题”

import SwiftUI

struct ContentView: View {
    var body: some View {
        Text("Hi!")
            .navigationBarTitle("Title", displayMode: .inline)
    }
}
struct DetailView: View {
    var title: String = ""
    var body: some View {
        Text("Hi!")
            .navigationBarTitle(title, displayMode: .inline)
    }
}
Run Code Online (Sandbox Code Playgroud)

xcode deprecated ios swift swiftui

5
推荐指数
2
解决办法
1123
查看次数

Kingfisher KFImage 如何使其加载缓存,即使 URL 发生变化?

我想要实现什么

我希望 KFImage 始终从内存和磁盘缓存中读取,而不是每次都重新下载图像。用户将获得流畅的体验,而不会在每次加载视图时看到几秒钟的图像下载。

怎么了

KFImage 视图从profileImages变量加载其图像,该变量初始化为空列表。在调用之前,该列表不会填充 URL,getProfileImage()这需要几秒钟的时间。

即使图像 URL 相同,视图出现后也会有几秒钟的间隙,因此 KFImage 不会从缓存中加载,需要重新下载图像。即使 URL 发生变化,是否可以使 KFImage 视图始终从缓存加载?或者我的问题还有其他解决方案吗?

import KingfisherSwiftUI

struct ProfileSubview: View {
    @State var profileImages: [URL] = []
    var body: some View {
        ForEach(0..<profileImages.count, id: \.self){index in
            KFImage(profileImages[index])
        }
    }
    .onAppear{
        getProfileImage()
    }
}

func getProfileImage(){
    let metadata = StorageMetadata()
    metadata.contentType = "image/jpeg"
    let storage = Storage.storage().reference().child("User_Profile")
    storage.downloadURL{url, error in
        if let error = error{
            print("Error downloading image, \(error)")
        }
        profileImages.append(url!)
    }
}
Run Code Online (Sandbox Code Playgroud)

swift kingfisher swiftui

5
推荐指数
0
解决办法
716
查看次数

获取保存到照片库的图像的 PHAsset/localIdentifier

我用来UIImageWriteToSavedPhotosAlbum将图像保存到照片应用程序。这是我发现的唯一可以让您执行此操作的功能。

这是我的代码:

import UIKit
import Photos

class ViewController: UIViewController {

    /// photo of a cactus
    let photoURL = URL(string: "https://raw.githubusercontent.com/aheze/DeveloperAssets/master/cactus.png")! /// in my app it's actually a local URL, but this also works
    
    func saveToPhotos() {
        DispatchQueue.global().async {
            let data = try? Data(contentsOf: self.photoURL)
            let image = UIImage(data: data!)
            UIImageWriteToSavedPhotosAlbum(image!, self, #selector(self.image(_:didFinishSavingWithError:contextInfo:)), nil)
        }
    }

    /// called when the image saving is complete
    @objc func image(_ image: UIImage, didFinishSavingWithError error: NSError?, contextInfo: UnsafeRawPointer) {
        print("Finished saving image")
        
        /// …
Run Code Online (Sandbox Code Playgroud)

ios swift photokit phasset

5
推荐指数
1
解决办法
2985
查看次数

在 Vapor 4 中的文件流之后运行操作

我运行一个处理大文件(上传和下载)的网站。目前我正在将网站从 Perfect 过渡到 Vapor。在 Perfect 中,将文件流式传输给用户,然后在文件完成后执行一些操作相对简单。

我试图在 Vapor 中做同样的事情,但我似乎无法弄清楚如何在流完成时设置回调,以及当它完成时,它是否完全被用户下载或有中断。

有谁知道如何做到这一点?这是我尝试过的一些事情。

这是基本结构

func downloadFile(request: Request) -> EventLoopFuture<Response> {
    //do some authentication stuff here
    
    let promise = request.eventLoop.makePromise(of: Response.self)
    let response = request.fileio.streamFile(at: "somePath")
    promise.succeed(response)
    let future = promise.futureResult
    return future
}
Run Code Online (Sandbox Code Playgroud)

第一次修改

func downloadFile(request: Request) -> EventLoopFuture<Response> {
    //do some authentication stuff here
    
    let promise = request.eventLoop.makePromise(of: Response.self)
    let response = request.fileio.streamFile(at: "somePath")
    promise.succeed(response)
    let future = promise.futureResult
    
    future.eventLoop.next().execute {
        //run some post-download processing here.
        //ideally I would like to know …
Run Code Online (Sandbox Code Playgroud)

swift vapor server-side-swift swift-nio

5
推荐指数
1
解决办法
118
查看次数

Sources 文件夹中的文件无法访问 Xcode Playground 中其他文件的公共类或函数

对于我的生活,我无法在任何地方找到解决方案,所以在我看来这是一个 Xcode 游乐场错误。

在 Sources 文件夹中,尽管我将一个类声明为公共类,但当我尝试从单独的文件(在 Sources 文件夹中)访问该类时,编译器会给我一条错误消息,指出它在范围内找不到该类。

但是,当我运行 Playground 并忽略该消息时,程序将构建并成功运行,并且错误消息将消失,直到我开始修改代码。

奇怪的是,它不会发生在 App 项目中;它只发生在操场上。

我使用名为“test”的playground文件做了一个简单的演示,并截图了发生的事情,你可以在下面的附图中看到,请指教!非常感谢!

尝试过的解决方案包括:

  1. 重启Xcode
  2. 重启 Mac
  3. 删除Xcode并重新安装Xcode

尽管被标记为公共,但在范围内找不到 Person 类

尽管被标记为公共,但在范围内找不到 Person 类

但是 Person 类被标记为 public

Person 类被标记为 public

代码编译成功,无论如何

代码编译成功,无论如何

运行操场后错误消失,但我修改后立即返回

运行操场后错误消失,但我修改后立即返回

macos xcode ios swift xcplayground

5
推荐指数
1
解决办法
137
查看次数

SwiftUI 有没有办法改变字符串中特殊字符的颜色?

我正在尝试构建一个泰语应用程序。为了显示泰语单词的发音,我想使用这三个特殊字符“\\ / -”。为了便于阅读,我想将这些字符的颜色更改为红色。\n有没有办法在 SwiftUI 中做到这一点?

\n

我用它作为模型:

\n
struct Alphabet {\n    var letter: String\n    var byname: String\n    var translation: String\n    var consonantClass: ConsonantClass\n}\n
Run Code Online (Sandbox Code Playgroud)\n

这是视图模型:

\n
let middleConsonants: [Alphabet] = [\n    Alphabet(letter: "\xe0\xb8\x81", byname: "g\xc3\xb4:- gai\\\\", translation: "Chicken", consonantClass: .middle)\n]\n
Run Code Online (Sandbox Code Playgroud)\n

在这里,在视图中,我想用不同的颜色显示它:

\n
struct ConsonantsListView: View {\n    var vm: ConsonantsViewModel = ConsonantsViewModel()\n    var consonants: [Alphabet]\n    \n    var body: some View {\n        ForEach(0..<consonants.count, id: \\.self) { index in\n            HStack {\n                Spacer()\n                NavigationLink(destination:\n                    VStack(spacing: 20) {\n                        Text(consonants[index].byname)\n                            .font(.largeTitle)\n                        Text(consonants[index].translation)\n                    }) {\n                        Text(consonants[index].letter)\n …
Run Code Online (Sandbox Code Playgroud)

ios swift swiftui

5
推荐指数
2
解决办法
1819
查看次数

我怎样才能推动这两种观点?Spacer() 不起作用

我试图将一个 GeometryReader 作为按钮推到屏幕底部,但 Spacer 在这里不起作用......这个想法是让应用程序响应所有屏幕尺寸。

VStack {
    GeometryReader { geometry in
        Text("VeganFood")
            .font(.system(size: geometry.size.width/12, weight: .bold))
            .foregroundColor(.white)
            .frame(maxWidth: .infinity)
            .frame(maxHeight: 200)
    }
    
    /// Spacer doesn't work here

    GeometryReader { geometry in
        Button(action: { }) {
            Text("Let's get started!")
                .font(.system(size: geometry.size.width/30, weight: .medium, design: .rounded))
                .frame(width: geometry.size.width/3, height: geometry.size.height/7)
                .foregroundColor(.white)
                .background(Color.black)
                .cornerRadius(20.0)
        }
        
        .frame(maxWidth: .infinity)
        .frame(maxHeight: 200)
    }
}
Run Code Online (Sandbox Code Playgroud)

让我们开始吧! 按钮居中,但应位于底部

ios swiftui

5
推荐指数
1
解决办法
286
查看次数

如何定义一个空的、“未初始化”的键路径并在以后设置它?

我编写了一个程序来计算视图的总宽度/高度(有时我想要总宽度,有时我想要总高度)。唯一的问题是:如果我计算宽度,我想10在总数中添加一个额外的值。这是我当前的代码:

func calculateLengthOfAllViews(calculatingWidth: Bool) {
    let views = [
        UIView(frame: CGRect.zero),
        UIView(frame: CGRect(x: 0, y: 0, width: 50, height: 50)),
        UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 50))
    ]

    var totalLength: CGFloat = 0
    
    if calculatingWidth {
        totalLength += 10 /// add extra 10 if calculating width
    } else {
        totalLength += 0
    }
    
    for view in views { /// add each view's width/height
        let length: CGFloat
        if calculatingWidth {
            length = view.frame.width
        } else {
            length …
Run Code Online (Sandbox Code Playgroud)

swift keypaths

5
推荐指数
1
解决办法
136
查看次数

如何解决中止陷阱:6 错误 - xcode 12

我们在 Xcode 12 中遇到了“中止陷阱 6”的问题。由于这个原因,应用程序无法使用 Xcode 12 运行。我们正在使用 swift 5 版本和 jsqmessageviewcontroller 目标 c 库。进入 Xcode 12 时出现以下错误。

<unknown>:0: error: fatal error encountered while reading from module 'wwww'; please file a bug report with your project and the crash log
<unknown>:0: note: module 'wwww' full misc version is '5.3.2(5.3.2)/Apple Swift version 5.3.2 (swiftlang-1200.0.45 clang-1200.0.32.28)'
top-level value not found
Cross-reference to module 'JSQMessagesViewController'
... JSQMessageMediaData
error: Abort trap: 6 (in target 'zapwww' from project 'zapwww')
Run Code Online (Sandbox Code Playgroud)

如果有人有解决方案,请帮助我们。

objective-c swift jsqmessagesviewcontroller xcode12

4
推荐指数
1
解决办法
7105
查看次数