标签: swift3

Xcode 9 Swift语言版(SWIFT_VERSION)

我最近将xcode更新到版本9.在Xcode 8.x之前,每当我使用pod update它时,它会向我显示一个更新代码,将代码转换为Swift 3并执行此操作来解决错误.但现在它给了我这个错误:

必须将"Swift语言版本"(SWIFT_VERSION)构建设置设置为使用Swift的目标支持的值.可以在构建设置编辑器中设置此设置.

对于这个错误我试过Build Settings > Swift Language Version,它是Swift 3.2但是由于更新调用重新安装了一些像Alamofire的pod,它说要安装Xcode 8.x将代码转换为Swift 3所以我需要安装一个使用最新Xcode的附加版本?如果是,那么如何使用Xcode 9安装Xcode 8?

xcode ios swift swift3 xcode9

108
推荐指数
3
解决办法
12万
查看次数

如何使用Swift 3.0中的NotificationCenter和swift 2.0中的NSNotificationCenter传递数据?

我正在socket.io我的swift ios应用程序中实现.

目前在几个面板上我正在监听服务器并等待收到的消息.我这样做是通过调用getChatMessage每个面板中的函数来实现的:

func getChatMessage(){
    SocketIOManager.sharedInstance.getChatMessage { (messageInfo) -> Void in
        dispatch_async(dispatch_get_main_queue(), { () -> Void in
            //do sth depending on which panel user is
        })
    }
}
Run Code Online (Sandbox Code Playgroud)

但是我注意到这是一个错误的方法,我需要更改它 - 现在我想开始只收听一次传入消息,当任何消息到来时 - 将此消息传递给任何监听它的面板.

所以我想通过NSNotificationCenter传递传入的消息.到目前为止,我能够传递发生的事情的信息,但不能传递数据本身.我是这样做的:

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.showSpinningWheel(_:)), name: showSpinner, object: nil)
Run Code Online (Sandbox Code Playgroud)

然后我有一个叫做的函数:

func showSpinningWheel(notification: NSNotification) {
}
Run Code Online (Sandbox Code Playgroud)

任何时候我想打电话给我:

NSNotificationCenter.defaultCenter().postNotificationName(hideSpinner, object: self)
Run Code Online (Sandbox Code Playgroud)

那么如何传递对象messageInfo并将其包含在被调用的函数中?

nsnotifications nsnotificationcenter ios swift swift3

102
推荐指数
4
解决办法
9万
查看次数

在swift中没有换行符打印

在swift 2.0中,print()自动添加换行符.在迅速1.2,println()print()以前是独立的功能.那么如何打印一些文本而不添加换行符,因为swift不再具有不附加换行符的打印功能.

swift swift2 swift3

100
推荐指数
3
解决办法
6万
查看次数

如何将类型应用于NSFetchRequest实例?

在Swift 2中,以下代码正在运行:

let request = NSFetchRequest(entityName: String)
Run Code Online (Sandbox Code Playgroud)

但是在Swift 3中它给出了错误:

无法推断通用参数"ResultType"

因为NSFetchRequest现在是通用类型.他们在文件中写道:

let request: NSFetchRequest<Animal> = Animal.fetchRequest
Run Code Online (Sandbox Code Playgroud)

所以如果我的结果类是例如Level我应该如何正确请求?

因为这不起作用:

let request: NSFetchRequest<Level> = Level.fetchRequest
Run Code Online (Sandbox Code Playgroud)

core-data swift swift3

100
推荐指数
5
解决办法
4万
查看次数

Swift 3 - 设备令牌现在被解析为'32BYTES'

我刚刚从Xcode 7更新到8 GM并且在Swift 3兼容性问题中我注意到我的设备令牌已停止工作.他们现在只读'32BYTES'.

    func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data)
{
    print(deviceToken) // Prints '32BYTES'
    print(String(data: deviceToken , encoding: .utf8)) // Prints nil
}
Run Code Online (Sandbox Code Playgroud)

在更新之前,我能够简单地将NSData发送到我的服务器,但现在我很难解析令牌.

我在这里错过了什么?

编辑:我只是测试转换回NSData,我看到了预期的结果.所以现在我只是对新数据类型感到困惑.

    func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data)
{
    print(deviceToken) // Prints '32BYTES'
    print(String(data: deviceToken , encoding: .utf8)) // Prints nil

    let d = NSData(data: deviceToken)
    print(d) // Prints my device token
}
Run Code Online (Sandbox Code Playgroud)

ios swift swift3

93
推荐指数
7
解决办法
3万
查看次数

如何修复Xcode 10.2中的“不支持SWIFT_VERSION'3.0',支持的版本为:4.0、4.2、5.0”错误?

我正在尝试运行从应用程序下载的文件,尝试在Xcode中打开并出现错误:

“显示最近的消息
:-1:不支持SWIFT_VERSION'3.0',支持的版本是:4.0、4.2、5.0。(在目标'SimpleWeather'中)”

屏幕截图已添加

xcode swift3 xcode10.2

93
推荐指数
11
解决办法
6万
查看次数

Swift 3上的NotificationCenter问题

我正在学习Swift 3,我正在尝试使用它NSNotificationCenter.这是我的代码:

func savePost(){
    let postData = NSKeyedArchiver.archivedData(withRootObject: _loadedpost)
    UserDefaults.standard().object(forKey: KEY_POST)
}
func loadPost(){
    if let postData = UserDefaults.standard().object(forKey: KEY_POST) as? NSData{
        if let postArray = NSKeyedUnarchiver.unarchiveObject(with: postData as Data) as? [Post]{
                _loadedpost = postArray
        }
    }
    //codeerror
    NotificationCenter.default().post(NSNotification(name: "loadedPost" as NSNotification.Name, object: nil) as Notification)
}
Run Code Online (Sandbox Code Playgroud)

这是观察者:

override func viewDidLoad() {
    super.viewDidLoad()
//codeerorr
    NotificationCenter.default().addObserver(self, selector: Selector(("onPostLoaded")), name: "loadedPost", object: nil)
}

func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}
Run Code Online (Sandbox Code Playgroud)

它总是给我错误"信号SIGBRT".当我尝试在观察者中更改名称时,这不是错误,但显然它没有显示任何内容.我该如何解决?

ios notificationcenter swift3

91
推荐指数
4
解决办法
11万
查看次数

"%不可用:使用truncatingRemainder"是什么意思?

使用扩展代码时出现以下错误,我不确定他们是否要求使用其他运算符或根据Internet搜索修改表达式中的值.

错误:%不可用:改为使用truncatingRemainder

扩展代码:

extension CMTime {
    var durationText:String {
        let totalSeconds = CMTimeGetSeconds(self)
        let hours:Int = Int(totalSeconds / 3600)
        let minutes:Int = Int(totalSeconds % 3600 / 60)
        let seconds:Int = Int(totalSeconds % 60)

        if hours > 0 {
            return String(format: "%i:%02i:%02i", hours, minutes, seconds)
        } else {
            return String(format: "%02i:%02i", minutes, seconds)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

设置分钟和秒变量时会发生错误.

xcode modulus ios swift swift3

91
推荐指数
3
解决办法
4万
查看次数

非'@ objc'方法不满足'@objc'协议的可选要求

概述:

  • 我有一个协议P1,它提供了Objective-C可选功能之一的默认实现.
  • 当我提供可选功能的默认实现时,会出现警告

编译器警告:

Non-'@objc' method 'presentationController(_:viewControllerForAdaptivePresentationStyle:)' does not satisfy optional requirement of '@objc' protocol 'UIAdaptivePresentationControllerDelegate'
Run Code Online (Sandbox Code Playgroud)

版:

  • 斯威夫特:3
  • Xcode:8(公开发布)

尝试:

  • 尝试添加@objc但没有帮助

题:

  • 我该如何解决这个问题?
  • 有工作吗?

码:

@objc protocol P1 : UIAdaptivePresentationControllerDelegate {

}

extension P1 where Self : UIViewController {

    func presentationController(_ controller: UIPresentationController, viewControllerForAdaptivePresentationStyle style: UIModalPresentationStyle) -> UIViewController? {
        return UIViewController()
    }
}


class A : UIViewController, P1 {

}
Run Code Online (Sandbox Code Playgroud)

swift swift-protocols swift3

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

如何检查Swift 3中的当前线程?

如何检查哪一个是Swift 3中的当前线程?

在Swift的早期版本中,可以通过执行以下操作来检查当前线程是否是主要线程:

NSThread.isMainThread()
Run Code Online (Sandbox Code Playgroud)

multithreading nsthread ios swift3

89
推荐指数
7
解决办法
3万
查看次数