我正在尝试使用 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) 我将最低部署目标从 iOS 14.0 降低到 iOS 13.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)
我想要实现什么
我希望 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) 我用来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) 我运行一个处理大文件(上传和下载)的网站。目前我正在将网站从 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) 对于我的生活,我无法在任何地方找到解决方案,所以在我看来这是一个 Xcode 游乐场错误。
在 Sources 文件夹中,尽管我将一个类声明为公共类,但当我尝试从单独的文件(在 Sources 文件夹中)访问该类时,编译器会给我一条错误消息,指出它在范围内找不到该类。
但是,当我运行 Playground 并忽略该消息时,程序将构建并成功运行,并且错误消息将消失,直到我开始修改代码。
奇怪的是,它不会发生在 App 项目中;它只发生在操场上。
我使用名为“test”的playground文件做了一个简单的演示,并截图了发生的事情,你可以在下面的附图中看到,请指教!非常感谢!
尝试过的解决方案包括:
尽管被标记为公共,但在范围内找不到 Person 类

但是 Person 类被标记为 public

代码编译成功,无论如何

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

我正在尝试构建一个泰语应用程序。为了显示泰语单词的发音,我想使用这三个特殊字符“\\ / -”。为了便于阅读,我想将这些字符的颜色更改为红色。\n有没有办法在 SwiftUI 中做到这一点?
\n我用它作为模型:
\nstruct Alphabet {\n var letter: String\n var byname: String\n var translation: String\n var consonantClass: ConsonantClass\n}\nRun Code Online (Sandbox Code Playgroud)\n这是视图模型:
\nlet middleConsonants: [Alphabet] = [\n Alphabet(letter: "\xe0\xb8\x81", byname: "g\xc3\xb4:- gai\\\\", translation: "Chicken", consonantClass: .middle)\n]\nRun Code Online (Sandbox Code Playgroud)\n在这里,在视图中,我想用不同的颜色显示它:
\nstruct 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) 我试图将一个 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)
我编写了一个程序来计算视图的总宽度/高度(有时我想要总宽度,有时我想要总高度)。唯一的问题是:如果我计算宽度,我想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) 我们在 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)
如果有人有解决方案,请帮助我们。
swift ×9
ios ×5
swiftui ×4
xcode ×2
deprecated ×1
keypaths ×1
kingfisher ×1
macos ×1
objective-c ×1
phasset ×1
photokit ×1
scenekit ×1
swift-nio ×1
vapor ×1
xcode12 ×1
xcplayground ×1