在 Swift 2 中用啥代替 stringByAppendingPathComponent [重复]

Posted

技术标签:

【中文标题】在 Swift 2 中用啥代替 stringByAppendingPathComponent [重复]【英文标题】:What to use in place of stringByAppendingPathComponent in Swift 2 [duplicate]在 Swift 2 中用什么代替 stringByAppendingPathComponent [重复] 【发布时间】:2015-09-27 23:17:26 【问题描述】:

我刚刚用新的 Swift 2 安装了 Xcode 7,我现在有 50 多个错误说“stringByAppendingPathComponent”不可用,我应该改用“URLByAppendingPathComponent”。我一直在设置我的所有纹理属性,如下所示:

let dropTexture = SKTexture(image: UIImage(
    contentsOfFile:NSBundle.mainBundle().resourcePath!.stringByAppendingPathComponent(
        "P04_rainDrop1.png"))!)

我一直在这样做,因此当 SKScene 更改并且它一直运行良好时,它们不会留在内存中。但是直接替换“URLByAppendingPathComponent”并不能修复错误。

如何更改它以修复错误并获得相同的 SKTexture?

【问题讨论】:

【参考方案1】:

你所要做的就是转换成 NSString 来恢复stringByAppendingPathComponent,像这样:

    let dropTexture = SKTexture(image: UIImage(
        contentsOfFile:(NSBundle.mainBundle().resourcePath! as NSString).stringByAppendingPathComponent(
            "P04_rainDrop1.png"))!)

正如 Leo Dabus 所说的那样,您可以通过向 String 添加扩展来避免所有转换。但是,您不应该像他建议的那样调用NSString(string:),这会生成一个额外的字符串。刚投:

extension String 
    func stringByAppendingPathComponent(pathComponent: String) -> String 
        return (self as NSString).stringByAppendingPathComponent(pathComponent)
    

【讨论】:

这仍然是实现这一目标的好方法吗?我找不到苹果是否在 Swift 上原生实现了这个 永远不要将 String 转换为 NSString。查看 Apple 规定的内容。 github.com/apple/swift/blob/… @Brennan 够公平的。如果不一定,我只是不喜欢回答“不要那样做”。但我实际上尽可能使用 URL 而不是字符串文件路径(现在几乎无处不在)。

以上是关于在 Swift 2 中用啥代替 stringByAppendingPathComponent [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 3.1 中使用啥来代替 NSEntityDescription

我可以在 Swift 中使用啥来代替“for”

Swift 4:NSFilenamesPboardType 不可用。用啥代替 registerForDraggedTypes?

unity3d在android安卓中用啥代替pc上的OnMouseDown函数

Objective-C/Swift中定义常量有啥区别?

Java中用CyclicBarrier以及CountDownLatch和join相比有啥不同