小编cra*_*777的帖子

Swift 3D Touch iOS 10主屏幕快速操作分享项目缺失

在我使用3D触摸主屏幕快速操作的应用程序中,我没有所有应用程序免费获得的新iOS 10默认共享选项.

我见过一些应用程序,例如亚马逊,它们有4个自定义快捷项(快速操作)和1个默认共享选项.

有没有办法让我可以获得默认的iOS 10共享选项?

swift 3dtouch ios10

20
推荐指数
1
解决办法
3961
查看次数

在发布应用程序时,我们是否还需要在Xcode 8.2和Swift 3中隐藏/删除打印语句?

在使用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是否自动执行,或者是否有其他优化不再需要它.

如果不是以上方式最好的方法?

printing release swift

10
推荐指数
1
解决办法
2053
查看次数

Xcode 7视网膜4"资产?

所以当我虽然我的swift 2升级无法变得更糟时它似乎你再也不能添加视网膜4"2x图像资产了.我再也不能再添加任何选项,所有我的旧资产仍然有视网膜4"图像但是我不能用4"视网膜图像创建新的图像集.为什么?

有什么办法解决这个问题?

swift xcode7

7
推荐指数
1
解决办法
738
查看次数

3D Touch Peek和Pop弄乱了SpriteKit的物理原理

我已经在游戏中实现了3DTouch监视和弹出动作。

本质上,我有一个MenuScene和一个GameScene。在MenuScene我有2 CollectionViewControllers(世界选择和级别选择)。我可以从世界选择菜单中使用“窥视”和“弹出”来预览级别选择菜单。一切正常,但是我有1个问题。

当我在中使用peek和pop时MenuScene,然后过渡GameScene到玩游戏时,物理状态似乎混乱了。施加的冲动非常低,因此我的球员只跳了大约1/5的高度。

即使增加在这种情况下进行调整的冲动也不起作用,但跳跃高度始终保持不变,无论我使用什么值都无所谓。

看来applyForce,我将其与核心运动配合使用来移动播放器的速度更加缓慢。

奇怪的是,它似乎只影响跳跃。我的拍摄代码(也使用脉冲)仍然可以正常工作。

当我在菜单场景中使用“窥视”和“弹出”按钮时,几乎感觉像是播放器较重,但是我看不到任何迹象表明。

如果我不使用peek和pop,MenuScene而只是转到GameScene我没有这个问题,那么一切都会像往常一样。

到目前为止,我尝试的步骤均无济于事。

  1. 退出时尝试取消注册预览委托MenuScene

     unregisterForPreviewing(withContext: ...)
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将预览委托直接添加到世界菜单CollectionViewController,而不是将其添加到r ootviewcontroller

  3. 使用控制台打印出我的GameScene物理值,看是否有些混乱。

我想念什么吗?偷看动作和流行动作为什么会弄乱SpriteKit的物理特性?

peek sprite-kit swift 3dtouch

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

Swift SpriteKit GameplayKit 检查 GKStateMachine 不等于状态

我刚刚使用苹果在 iOS9 中引入的实体和组件基础架构 (GameplayKit) 完成了游戏的转换。

我不知道如何检查当前状态(GKStateMachine)不等于状态。假设我想检查 currentState 是否等于我的 GameOverState,我会这样说

 if self.stateMachine.currentState is GameOverState {...
Run Code Online (Sandbox Code Playgroud)

我如何检查当前状态是否不等于 GameOverState,“... is ...”sytanx 对我来说是新的,所以我不知道如何调用它。

swift

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

IAP实际验证收据(Swift)

我一直在尝试在我的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)

validation in-app-purchase receipt swift

3
推荐指数
2
解决办法
7049
查看次数

Swift 2打印(),怎么隐藏?

在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)

但是,这样做意味着上面提到的助手将不再起作用.有关如何解决此问题的任何建议.非常感谢你.

println swift

3
推荐指数
2
解决办法
5075
查看次数

AnyPublisher 的 Swift 5.5 异步等待方法

我试图在应该返回 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)

async-await swift combine

3
推荐指数
1
解决办法
1451
查看次数

AVAudioPlayer 的 do/catch 是不必要的吗?

我有一个关于 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)

avaudioplayer swift

2
推荐指数
1
解决办法
454
查看次数

使用枚举类型NSCoding保存字典数组

我一直试图找出如何使用带有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])一样,因为编译器也会抛出错误

arrays nscoding swift

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