安装Xcode 9.0,语法升级到swift4.0后只是根据系统提示更改了报错的语法,这个过程还好,基本上跟着提示走就可以。和原来不一样的是,不是双击报错的红色而是点Fix。但是工程基本ok后就要开始解决警告(Warning)了,然后就碰到了一些问题。
1.substring(from:)' is deprecated: Please use String slicing subscript with a 'partial range from' operator. 警告
解决办法
let newStr = String(str[..<index]) // = str.substring(to: index) In Swift 3
let newStr = String(str[index...]) // = str.substring(from: index) In Swif 3
let newStr = String(str[range]) // = str.substring(with: range) In Swift 3
2.第三方库升级
只是列举我用到的
pod 'Alamofire','~> 4.5'
pod 'Moya', '>= 9.0'
pod 'SwiftyJSON'
pod 'FMDB'
pod 'MBProgressHUD'
pod 'MJRefresh'
pod 'IQKeyboardManagerSwift','>= 5.0.0'
pod 'SDWebImage'
pod 'SnapKit'
pod 'Charts'
附上终端截图
其中的Charts我直接更新到最新了
Moya从8.X升级到9.X有改动,要细看,不然真的蒙蔽(差点以为要大改)。
从8.x升级到9.x的Github文档
public protocol TargetType {
/// The target's base `URL`.
var baseURL: URL { get }
/// The path to be appended to `baseURL` to form the full `URL`.
var path: String { get }
/// The HTTP method used in the request.
var method: Moya.Method { get }
/// Provides stub data for use in testing.
var sampleData: Data { get }
/// The type of HTTP task to be performed.
var task: Task { get }
/// Whether or not to perform Alamofire validation. Defaults to `false`.
var validate: Bool { get }
// The headers to be used in the request.
var headers: [String: String]? { get }
}
这是9.x的协议,新增了一个必须属性headers,然而我并没有使用,直接设置为nil了
var headers: [String : String]? { return nil }
移除了之前的parameters及parameterEncoding,然后新增了Task的类型。其实就是把这两个属性写到了Task里
var task: Task {
return .requestParameters(parameters: self.parameters!, encoding: URLEncoding.default)
}
也就是说增加headers,删掉parameterEncoding,然后Task更换写法就OK啦。如果有不足欢迎讨论。