在我使用3D触摸主屏幕快速操作的应用程序中,我没有所有应用程序免费获得的新iOS 10默认共享选项.
我见过一些应用程序,例如亚马逊,它们有4个自定义快捷项(快速操作)和1个默认共享选项.
有没有办法让我可以获得默认的iOS 10共享选项?
在使用Xcode 8.2和Swift 3发布应用程序时,仍然建议/需要隐藏打印语句吗?
目前我有这样的全局打印功能
func print(_ items: Any...) {
#if DEBUG
Swift.print(items[0])
#endif
}
Run Code Online (Sandbox Code Playgroud)
只有在项目处于调试模式时才打印.
Apple最近在Xcode中默认添加了DEBUG标志,因此我们不必再在Build Settings中的OtherFlags中手动添加它.
这让我想知道我们是否真的需要删除print语句,或者Swift/Xcode是否自动执行,或者是否有其他优化不再需要它.
如果不是以上方式最好的方法?
所以当我虽然我的swift 2升级无法变得更糟时它似乎你再也不能添加视网膜4"2x图像资产了.我再也不能再添加任何选项,所有我的旧资产仍然有视网膜4"图像但是我不能用4"视网膜图像创建新的图像集.为什么?
有什么办法解决这个问题?
我已经在游戏中实现了3DTouch监视和弹出动作。
本质上,我有一个MenuScene和一个GameScene。在MenuScene我有2 CollectionViewControllers(世界选择和级别选择)。我可以从世界选择菜单中使用“窥视”和“弹出”来预览级别选择菜单。一切正常,但是我有1个问题。
当我在中使用peek和pop时MenuScene,然后过渡GameScene到玩游戏时,物理状态似乎混乱了。施加的冲动非常低,因此我的球员只跳了大约1/5的高度。
即使增加在这种情况下进行调整的冲动也不起作用,但跳跃高度始终保持不变,无论我使用什么值都无所谓。
看来applyForce,我将其与核心运动配合使用来移动播放器的速度更加缓慢。
奇怪的是,它似乎只影响跳跃。我的拍摄代码(也使用脉冲)仍然可以正常工作。
当我在菜单场景中使用“窥视”和“弹出”按钮时,几乎感觉像是播放器较重,但是我看不到任何迹象表明。
如果我不使用peek和pop,MenuScene而只是转到GameScene我没有这个问题,那么一切都会像往常一样。
到目前为止,我尝试的步骤均无济于事。
退出时尝试取消注册预览委托MenuScene。
unregisterForPreviewing(withContext: ...)
Run Code Online (Sandbox Code Playgroud)将预览委托直接添加到世界菜单CollectionViewController,而不是将其添加到r ootviewcontroller。
使用控制台打印出我的GameScene物理值,看是否有些混乱。
我想念什么吗?偷看动作和流行动作为什么会弄乱SpriteKit的物理特性?
我刚刚使用苹果在 iOS9 中引入的实体和组件基础架构 (GameplayKit) 完成了游戏的转换。
我不知道如何检查当前状态(GKStateMachine)不等于状态。假设我想检查 currentState 是否等于我的 GameOverState,我会这样说
if self.stateMachine.currentState is GameOverState {...
Run Code Online (Sandbox Code Playgroud)
我如何检查当前状态是否不等于 GameOverState,“... is ...”sytanx 对我来说是新的,所以我不知道如何调用它。
我一直在尝试在我的spritekit游戏中实现收据验证.我一直在关注各种教程,基本上结束了这段代码
enum RequestURL: String {
case production = "https://buy.itunes.apple.com/verifyReceipt"
case sandbox = "https://sandbox.itunes.apple.com/verifyReceipt"
case myServer = "my server address"
}
enum ReceiptStatusCode: Int {
// Not decodable status
case unknown = -2
// No status returned
case none = -1
// valid status
case valid = 0
// The App Store could not read the JSON object you provided.
case JSONNotReadable = 21000
// The data in the receipt-data property was malformed or missing.
case malformedOrMissingData = 21002
// The …Run Code Online (Sandbox Code Playgroud) 在Swift 2之前,你可以通过这样的小帮手隐藏你所有的println()
func println(object: Any) {
#if DEBUG
Swift.println(object)
#endif
Run Code Online (Sandbox Code Playgroud)
如果你改成这个
func print(object: Any) {
#if DEBUG
Swift.print(object)
#endif
Run Code Online (Sandbox Code Playgroud)
它按预期工作,但print()有一个新的appendLine功能.所以在你的代码中你可以写
println("Test", appendNewLine: false)
Run Code Online (Sandbox Code Playgroud)
但是,这样做意味着上面提到的助手将不再起作用.有关如何解决此问题的任何建议.非常感谢你.
我试图在应该返回 AnyPublisher 的方法中调用 Swift 5.5 异步抛出方法,但我很难实现这一点。我尝试使用Future(promise),但不起作用,我只设法找到一个 Swift 5.5 API 将基于闭包的方法转换为异步方法。
class Loader {
func loadSomeData() -> async throws [String] {
/// some code
}
}
class Service {
let loader: Loader
init(loader: Loader) {
self.loader = loader
}
func someDataPublisher() -> AnyPublisher<[String], Error> {
// How can I convert this?
try await loader.loadSomeData()
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个关于 AVAudioPlayer 所需的 do/catch 语法的问题。它实际上是做什么用的?
让我们看一些示例,根据我看过的教程,代码或多或少应该是什么样子。
1) 在这里,我强制解包 try 语句中的可选 NSURL。我的假设是,如果我现在更改 mp3 名称,它应该调用 catch 块,但我在 try 行上遇到 nil 崩溃,因为 avPlayerURL 属性为零。为什么它没有被抓住?
do {
let avPlayer1URL = NSBundle.mainBundle().URLForResource("Test", withExtension: "mp3")
avPlayer1 = try AVAudioPlayer(contentsOfURL: avPlayer1URL!)
avPlayer1?.delegate = self
avPlayer1?.numberOfLoops = -1
avPlayer1?.prepareToPlay()
} catch {
print("Error finding AVAudioPlayer 1 file")
}
Run Code Online (Sandbox Code Playgroud)
2) 我直接强制解包 URL 属性,结果与 1 相同。在这种情况下,这是有意义的,因为 try 行从未被调用。所以我猜这个例子是糟糕的编码,但很多教程都以这种方式或方式 1 向您展示它。
do {
let avPlayer1URL = NSBundle.mainBundle().URLForResource("Test", withExtension: "mp3")!
avPlayer1 = try AVAudioPlayer(contentsOfURL: avPlayer1URL)
avPlayer1?.delegate = self
avPlayer1?.numberOfLoops = -1
avPlayer1?.prepareToPlay() …Run Code Online (Sandbox Code Playgroud) 我一直试图找出如何使用带有NSCoding的Enum类型保存字典数组.
我有一个奖章类型的枚举
enum Medal: String {
case Unearned = "NoMedal"
case Gold = "GoldMedal"
case Silver = "SilverMedal"
}
Run Code Online (Sandbox Code Playgroud)
我的GameData.swift类中有一系列带有奖章类型的词典.
var medals: [[String: Medal]] = [
["1": .Unearned, "2": .Unearned, "3": .Unearned]
...
]
Run Code Online (Sandbox Code Playgroud)
比我在解码器方法中有这个代码
convenience required init?(coder decoder: NSCoder) {
self.init()
medals = decoder.decodeObjectForKey(Key.medals) as? [[String: Medal]] ?? medals
}
Run Code Online (Sandbox Code Playgroud)
这是编码器方法,我认为这是导致我的问题
// MARK: - Encode
func encodeWithCoder(encoder: NSCoder) {
encoder.encodeObject(medals as? AnyObject, forKey: Key.medals)
}
Run Code Online (Sandbox Code Playgroud)
问题是重新启动它没有保存/加载奖牌阵列,它会一直重置为默认值.
我也尝试过这个
encoder.encodeObject(medals as? [[String: Medal]], forKey: Key.medals)
Run Code Online (Sandbox Code Playgroud)
它会导致编译器错误.
我也不能使用常规语法
encoder.encodeObject(medals, forKey: Key.medals)
Run Code Online (Sandbox Code Playgroud)
就像我对使用正常值的字典数组(例如[String:Int])一样,因为编译器也会抛出错误
swift ×10
3dtouch ×2
arrays ×1
async-await ×1
combine ×1
ios10 ×1
nscoding ×1
peek ×1
printing ×1
println ×1
receipt ×1
release ×1
sprite-kit ×1
validation ×1
xcode7 ×1