将 swift 2.3 转换为 swift 3 错误

     2023-03-10     158

关键词:

【中文标题】将 swift 2.3 转换为 swift 3 错误【英文标题】:Convert swift 2.3 to swift 3 error 【发布时间】:2016-12-18 15:09:46 【问题描述】:

我在 xcode 8.2 中将 swift 2.3 转换为 swift 3

swift 2.3:有代码,有代码,有代码,有代码,有代码

func playAudio() 
    self.stopAudio()
    let lessonObject:LessonObject = self.lessonArray[self.selectedIndex] as! LessonObject
    let fullPath:String! = Constants.URL_HOST + "\(lessonObject.lessonPath)"
    let soundURL:NSURL! = NSURL.init(string:fullPath)
    let documentsDirectoryURL =  NSFileManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first!
    let destinationUrl = documentsDirectoryURL.URLByAppendingPathComponent(soundURL.lastPathComponent!)
    if NSFileManager().fileExistsAtPath(destinationUrl!.path!) 
        if let soundData = NSData(contentsOfFile: destinationUrl!.path!) 
            self.initAudioWithData(soundData)
        
        else 
            self.audioErrorAction()
        
        return
    
    
    if let soundData = NSData(contentsOfURL:NSURL(string:fullPath)!) 
        self.initAudioWithData(soundData)
    
    else 
        self.audioErrorAction()
    

swift 3:代码有错误吗?

        func playAudio() 
        self.stopAudio()
        let lessonObject:LessonObject = self.lessonArray[self.selectedIndex] as! LessonObject
        let fullPath:String! = Constants.URL_HOST + "\(lessonObject.lessonPath)"
let soundURL:URL! = URL.init(fileURLWithPath: fullPath)
        let documentsDirectoryURL =  FileManager().urls(for: .documentDirectory, in: .userDomainMask).first!
let destinationUrl = documentsDirectoryURL.appendingPathComponent(soundURL.lastPathComponent)
        if FileManager().fileExists(atPath: destinationUrl.path)
            if let soundData = try? Data(contentsOf: URL(fileURLWithPath: destinationUrl.path))
            
                self.initAudioWithData(soundData)
            
            else 
                self.audioErrorAction()
            
            return
        
if let soundData = try? Data(contentsOf: URL(string:fullPath)!)
        
            self.initAudioWithData(soundData)
        
        else 
            self.audioErrorAction()
        
    

转换我的错误后:

在展开可选值时发现 nil。

我构建了 swift 2.3:destinationUrl = "file:///Users/admin/Library/.../Documents/test.mp3" 0x00006080002a73e0

我构建了 swift 3:destinationUrl = "file:///Users/admin/Library/.../Documents/Optional(%22test.mp3%22)"

【问题讨论】:

哪一行报错? 如果让 soundData = 试试?数据(contentsOf:URL(字符串:fullPath)!) 如果您已经将destinationUrl 作为URL,为什么要从它的path 创建一个新的URL?只需if let soundData = try? Data(contentsOf: destinationUrl) 你不应该使用init(fileURLWithPath: String)吗?而不是init(string: String)? 无论如何,如果文件不存在,你为什么要加载数据? 【参考方案1】:

错误的来源在这一行

let fullPath:String! = Constants.URL_HOST + "\(lessonObject.lessonPath)"

首先——不管与问题无关——不要注释编译器可以推断的类型。你把一个 good 非可选字符串变成了一个 worse 隐式展开的可选字符串。

lessonPath 属性显然也是一个(隐式展开)可选。使用字符串插值,您会得到文字 "Optional(foo)"。如果属性可能是nil,则需要解开可选绑定或使用可选绑定。如果值永远不能是nil,请考虑使用非可选属性

let fullPath = Constants.URL_HOST + "\(lessonObject.lessonPath!)"

更多信息请阅读Swift 3 incorrect string interpolation with implicitly unwrapped Optionals

永远不要将属性声明为隐式展开的可选项 避免编写初始化程序

【讨论】:

从 Swift 3.0 转换为 Swift 2.3

】从Swift3.0转换为Swift2.3【英文标题】:ConvertfromSwift3.0toSwift2.3【发布时间】:2016-12-1402:52:47【问题描述】:我有一个静态库,我将它从旧的Swift转换为Swift2.3,然后再转换为Swift3.0。现在我需要库的两个版本(2.3和3.0),但我忘记... 查看详情

从 Swift 2.3 -> 3.2 转换时,无法将 String 类型的值转换为指定类型 NSManagedObjectContext

】从Swift2.3->3.2转换时,无法将String类型的值转换为指定类型NSManagedObjectContext【英文标题】:CannotconvertvalueoftypeStringtospecifiedtypeNSManagedObjectContext,WhileconvertingfromSwift2.3->3.2【发布时间】:2018-11-2404:51:02【问题描述】:我需要帮... 查看详情

转换为 swift 2.3 后模糊使用“下标”

】转换为swift2.3后模糊使用“下标”【英文标题】:Ambiguoususeof\'subscript\'afterconvertingtoswift2.3【发布时间】:2016-09-1309:32:16【问题描述】:我在转换为swift2.3后出现此错误。guardletjson=tryNSJSONSerialization.JSONObjectWithData(data!,options:[])as?N... 查看详情

转换为 swift 2.3 后模糊使用“下标”

】转换为swift2.3后模糊使用“下标”【英文标题】:Ambiguoususeof\'subscript\'afterconvertingtoswift2.3【发布时间】:2016-09-1309:32:16【问题描述】:我在转换为swift2.3后出现此错误。guardletjson=tryNSJSONSerialization.JSONObjectWithData(data!,options:[])as?N... 查看详情

如何使用 Swift 2.3 和 3.0 编译模块?

...布时间】:2016-09-1605:31:19【问题描述】:我更新到Xcode8并转换为最新的Swift3.0语法。我的项目中有一些Cocoapod,其中一些在Swift2.3上(例如,一些较旧的pod需要将Alamofire设置为v3.5,它运行Swift2.3)。我已将这些Pod设置为使用Lega 查看详情

从 swift 3 转换为 swift 2.3 或从 iPhone 上的应用程序获取源代码

】从swift3转换为swift2.3或从iPhone上的应用程序获取源代码【英文标题】:Convertfromswift3toswift2.3orgetsourcecodefromappontheiPhone【发布时间】:2016-09-2409:04:24【问题描述】:我的问题是,我在xCode8中转换为Swift3后,在一个项目中收到160个... 查看详情

升级到 Xcode 8 并将语法从 swift 2.3 转换为 swift 3.0 后文件丢失警告

】升级到Xcode8并将语法从swift2.3转换为swift3.0后文件丢失警告【英文标题】:FilesmissingwarningafterupgradingtoXcode8andconvertingsyntaxfromswift2.3toswift3.0【发布时间】:2016-09-1618:57:19【问题描述】:我从Xcode7.3升级到Xcode8.0,并从swift2.3toswift3.0... 查看详情

如何在 Swift 2.3 中将 UInt8 转换为 Anyobject

】如何在Swift2.3中将UInt8转换为Anyobject【英文标题】:HowtoConvertUInt8toAnyobjectinSwift2.3【发布时间】:2016-10-1810:06:24【问题描述】:我正在尝试CryptoSwift,我尝试将UInt8转换为Anyobject。如何转换让加密:[UInt8]!encrypted=tryAES(key:value,iv:i... 查看详情

Swift 2.3 到 Swift 3.1 迁移 - Alamofire 请求错误

...07-2111:19:04【问题描述】:我正在将使用Swift2.3的现有项目转换为Swift3.1。到目前为止,我成功地按照Xcode的建议实施了所有更改,并且还添加了最新的POD。一切似乎都很好,除了以下-(因为这是一个已经存在的代 查看详情

不能使用 String 类型的索引为 NSDictionary 类型的值下标。从 Swift 2.3 -> 3.2 转换时

...tring类型的索引为NSDictionary类型的值下标。从Swift2.3->3.2转换时【英文标题】:CannotsubscriptavalueoftypeNSDictionarywithanindexoftypeString.WhileconvertingfromSwift2.3->3.2【发布时间】:2018-11-2323:16:03【问题描述】:我需要帮助。从Swift2.3->3.2... 查看详情

将函数转换为 Swift 3 的奇怪问题

】将函数转换为Swift3的奇怪问题【英文标题】:StrangeissueonconvertingfunctiontoSwift3【发布时间】:2016-12-0220:25:57【问题描述】:我在Swift2中有一个函数:publicoverridefuncdrawRect(rect:CGRect)Xcode提供将其转换为Swift3。我按下红点转换,它转... 查看详情

将swift 2视频代码转换为swift 3视频代码

】将swift2视频代码转换为swift3视频代码【英文标题】:Convertswift2videocodeintoswift3videocode【发布时间】:2016-10-2520:42:49【问题描述】:下面的代码显示了一个视频。它在swift2中完美运行,但在swift3xcode中表明MPMoivePlayerController代码已... 查看详情

将语法转换为 swift 3.0 NSFetchedResultsController

】将语法转换为swift3.0NSFetchedResultsController【英文标题】:convertsyntaxtoswift3.0NSFetchedResultsController【发布时间】:2016-09-1703:32:04【问题描述】:如何将我的NSFetchedResultsController转换为swift3.0,我无法让它工作....我尝试了苹果的自动... 查看详情

swift 2.3 如何正确使用已弃用的 CBCentralManagerState

...时间】:2016-09-0213:14:45【问题描述】:我只是将我的项目转换为swift2.3(XCode8beta6),但我不知道如何在旧iOS版本上使用枚举CBManagerState(我的应用具有部署目标iOS7)。CBC 查看详情

Swift 3 - 将 Int32 转换为 Int [重复]

】Swift3-将Int32转换为Int[重复]【英文标题】:Swift3-convertInt32toInt[duplicate]【发布时间】:2017-03-0204:30:29【问题描述】:使用Swift3并在IF语句中比较Int32和Int时遇到问题。//myIntFromCoreDataisanInt32//kMyConstantisanIntifmyIntFromCoreData==kMyConstant//... 查看详情

Swift 3 将数据转换为 AVAsset 或 PHAsset

】Swift3将数据转换为AVAsset或PHAsset【英文标题】:Swift3ConvertDatatoAVAssetorPHAsset【发布时间】:2017-06-1822:32:14【问题描述】:我需要将Data对象转换为AVAsset。曾经我需要将Realm中的视频保存为Data对象。为了保存它,我将AVAsset转换为Da... 查看详情

将 Swift 3.0 的选择器转换为 2.2

】将Swift3.0的选择器转换为2.2【英文标题】:convertselectorofSwift3.0to2.2【发布时间】:2016-11-2911:29:11【问题描述】:letselector:Selector=#selector(getter:UIPrinter.displayName)我想将此行转换为swift2.2这里是函数的完整代码funcindexFiles()letselector:S... 查看详情

将 swift 3 项目转换为使用 CoreData

】将swift3项目转换为使用CoreData【英文标题】:convertingswift3projecttouseCoreData【发布时间】:2016-11-3015:11:35【问题描述】:我对Swift和Cocoa世界比较陌生,很想听听人们对以下方面设计数据模型的最佳方式的看法:我目前有一个macOS... 查看详情