从Swift 2转换为Swift 3(甚至在将edit-> convert - >转换为当前的swift语法之后),我遇到了很多错误.特别:
在我下载此测试版Xcode 8.0并转换为Swift 3之前,我的项目总共显示了90个错误,这些错误在Swift 2中正常运行
这是我正在制造的转换错误吗?
我一直在使用自定义相机,最近我和Swift 3一起升级到Xcode 8 beta.我原来是这样的:
var stillImageOutput: AVCaptureStillImageOutput?
Run Code Online (Sandbox Code Playgroud)
但是,我现在收到警告:
在iOS 10.0中不推荐使用'AVCaptureStillImageOutput':改用AVCapturePhotoOutput
由于这是相当新的,我没有看到很多关于此的信息.这是我目前的代码:
var captureSession: AVCaptureSession?
var stillImageOutput: AVCaptureStillImageOutput?
var previewLayer: AVCaptureVideoPreviewLayer?
func clickPicture() {
if let videoConnection = stillImageOutput?.connection(withMediaType: AVMediaTypeVideo) {
videoConnection.videoOrientation = .portrait
stillImageOutput?.captureStillImageAsynchronously(from: videoConnection, completionHandler: { (sampleBuffer, error) -> Void in
if sampleBuffer != nil {
let imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(sampleBuffer)
let dataProvider = CGDataProvider(data: imageData!)
let cgImageRef = CGImage(jpegDataProviderSource: dataProvider!, decode: nil, shouldInterpolate: true, intent: .defaultIntent)
let image = UIImage(cgImage: cgImageRef!, scale: 1, orientation: .right)
}
})
}
} …
Run Code Online (Sandbox Code Playgroud) 我想知道是否已经可以使用Realm和Swift 3.0的beta版.
虽然我在Realm repo中看到了RealmSwift-swift3.0目录,但我没有成功正确使用它.我应该如何从源代码安装它?
在Swift 2中,我使用了以下代码:
let path = NSBundle.mainBundle().pathForResource("Document", ofType: "pdf")!
let url = NSURL.fileURLWithPath(path)
webView.loadRequest(NSURLRequest(URL: url))
Run Code Online (Sandbox Code Playgroud)
现在,使用Xcode 8和Swift 3,Xcode自动将其转换为:
let path = Bundle.main.pathForResource("Translation", ofType: "pdf")!
let url = URL.fileURL(withPath: path)
webView.loadRequest(URLRequest(url: url))
Run Code Online (Sandbox Code Playgroud)
在第二行,声明url
,Xcode给我以下错误:
类型"网址"没有会员'fileURL'
我该如何解决这个错误?谢谢!
在我的项目中,我使用app group将数据传输到apple watch!这看起来像这样
let sharedDefaults = NSUserDefaults(suiteName: "group.com.myappname.defaults")
sharedDefaults?.setObject(MyData, forKey: "DataKey")
sharedDefaults?.synchronize()
Run Code Online (Sandbox Code Playgroud)
在WKInterfaceController中,我使用以下代码获取数据:
let sharedDefaults = NSUserDefaults(suiteName: "group.com.myappname.defaults")
let MyData = sharedDefaults?.objectForKey("DataKey") as! [[AnyObject]]
Run Code Online (Sandbox Code Playgroud)
一切正常!
现在我尝试检测sharedDefaults中的数据?.objectForKey("DataKey")是否确实发生了变化.我尝试使用addObserver方法:
override func willActivate() {
NSUserDefaults(suiteName: "group.com.myappname.defaults")!.addObserver(self, forKeyPath: "DataKey", options: NSKeyValueObservingOptions.New, context: nil)
}
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>){
print("Data Changed")
}
Run Code Online (Sandbox Code Playgroud)
但是"覆盖func observeValueForKeyPath"仅在WKInterfaceController激活时调用,并且当我在NSUserDefaults中更改数据时没有调用(suiteName:"group.com.myappname.defaults")
我也尝试使用NSNotificationCenter:
override func willActivate() {
let sharedDefaults = NSUserDefaults(suiteName: "group.com.myappname.defaults")
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(userDefaultsDidChangeNotificationMethod(_:)), name: NSUserDefaultsDidChangeNotification, object: nil)
}
func userDefaultsDidChangeNotificationMethod(notification: NSNotification){
print("Data Changed") …
Run Code Online (Sandbox Code Playgroud) 我见过几个类似于我的问题; 然而,那些与swift 2/1有关,我目前正在使用swift 3.我相信Apple已经稍微改变了它.
class Person: NSObject, NSCoding {
var signature: UIImage
init(signature: UIImage) {
self.signature = signature
}
required convenience init(coder aDecoder: NSCoder) {
let signature = aDecoder.decodeObject(forKey: "signature") as! UIImage
self.init(signature: signature)
}
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encode(signature, forKey: "signature")
}
}
Run Code Online (Sandbox Code Playgroud)
你会注意到Swift 3现在如何强迫我使用required convenience init(
而不是required init(
.也许这与它有关.
我该如何解决这个问题?谢谢!
我正在构建我的第一个自定义键盘。我正在使用 Swift 2 和 Xcode 7。我用它作为我的键盘
(我在 iPhone 上运行)当我点击外星人小脸时,我想要
带有该图像的小表情符号或
将图像(如果可能)插入到用户键入的位置。我已经尝试过这段代码
let pasteboard: UIPasteboard = UIPasteboard.generalPasteboard()
let image: UIImage = currentImage!
let newImage = scaleImage(image, toSize: CGSize(width: 40, height: 40))
let imgData: NSData = UIImagePNGRepresentation(newImage)!
pasteboard.setData(imgData, forPasteboardType: UIPasteboardTypeListImage[0] as! String)
let proxy = UITextDocumentProxy.self as! UITextDocumentProxy
let data = pasteboard.string!
print(data)
proxy.insertText(data)
Run Code Online (Sandbox Code Playgroud)但我一直没有成功。当我 时print(data)
,我收到nil
,然后是EXC_BAD_ACCESS
下一行的 。我怎样才能实现我的两个目标中的一个?感谢您的帮助。
我想获得一些用户的个人资料图片.这是我开始的代码:
databaseRef.child("Users").queryOrderedByKey().observeSingleEvent(of: .childAdded) { (snapshot) in
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试遵循Swift 2教程; 但是,我正在使用Swift 3.我已经尝试调整代码,但是我没有成功,因为我收到以下错误
模糊地使用'observeSingleEvent(of:with :)'
此错误在第一行.我该如何解决这个问题?谢谢!
我试图禁止用户在我的文本字段之一中使用自己的键盘。在进行研究时,我发现我需要以下代码来禁用自定义键盘:
func application(application: UIApplication, shouldAllowExtensionPointIdentifier extensionPointIdentifier: String) -> Bool {
if extensionPointIdentifier == UIApplicationKeyboardExtensionPointIdentifier {
return false
}
return true
}
Run Code Online (Sandbox Code Playgroud)
但是,我不想禁用所有文本字段的键盘。如何将其仅应用于特定文本字段?谢谢!