我正在尝试根据不同的string长度来计算UILabel的高度。 func calculateContentHeight() -> CGFloat{ var maxLabelSize: CGSize = CGSizeMake(frame.size.width – 48, CGFloat(9999)) var contentNSString = contentText as NSString var expectedLabelSize = contentNSString.boundingRectWithSize(maxLabelSize, options: NSStringDrawingOptions.UsesLineFragmentOrigin, attributes: [NSFontAttributeName: UIFont.systemFontOfSize(16.0)], context: nil) print("\(expectedLabelSize)") return expectedLabelSize.size.height } 以上是我用来确定高度的当前function,但它不工作。 我将不胜感激任何帮助,我可以得到。 我会在Swift中而不是客观的C.
我正在学习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) } 这是观察者: override func viewDidLoad() { super.viewDidLoad() […]
我正在写速度3.0 我有这个代码,这给我的警告结果的调用是未使用的 public override init(){ super.init() } public init(annotations: [MKAnnotation]){ super.init() addAnnotations(annotations: annotations) } public func setAnnotations(annotations:[MKAnnotation]){ tree = nil addAnnotations(annotations: annotations) } public func addAnnotations(annotations:[MKAnnotation]){ if tree == nil { tree = AKQuadTree() } lock.lock() for annotation in annotations { // The warning occurs at this line tree!.insertAnnotation(annotation: annotation) } lock.unlock() } 我已经尝试在另一个类中使用这个方法,但它仍然给我错误的代码insertAnnotation是上面的 func […]
我刚刚在Xcode中创build了一个新的Swift项目。 我想知道它使用的是哪个版本的Swift。 我如何在Xcode或terminal中看到我在项目中使用的是什么版本的Swift?
本文有助于理解Swift 3的新访问说明符。 它也给出了一些不同用法的fileprivate和private例子。 我的问题是 – 是不是使用fileprivate函数将被使用只在这个文件中使用相同的private ?
在早期版本的Swift中,可以使用下面的代码创build一个延迟: let time = dispatch_time(dispatch_time_t(DISPATCH_TIME_NOW), 4 * Int64(NSEC_PER_SEC)) dispatch_after(time, dispatch_get_main_queue()) { //put your code which should be executed with a delay here } 但是现在,在Swift 3中,Xcode会自动更改6个不同的东西,但是会出现以下错误:“无法将DispatchTime.now转换为期望值dispatch_time_t aka UInt64 。 在Swift 3中运行一系列代码之前,如何创build一个延迟?
我正在通过一个Swift 2中编写的Swift初学者教程。 它包含的代码就像(随机的例子) override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) { 这在Swift 3(我使用XCode 8 Beta)中发生了变化,IDE将其转换为新的(漂亮!)符号: override func prepare(for segue: UIStoryboardSegue, sender: AnyObject?) { 在这里让我困惑的是“for”中的“for”。 我明白为什么它在那里,但是句法上是什么样的元素呢? 是否for segue或segue命名的参数? 它仅仅是装饰 – 一个毫无意义的元素,而是帮助开发者理解上下文吗? 它做了什么吗? 这个概念有一个名字吗? 我可以用我自己的方法吗? 我看到与“在”和“在”相同的情况。
在Swift 2.2中,我经常使用类似于let x = UIView?()的简洁语法来声明variables。 这给了x UIView? 键入,并用nil初始化它。 (当然,在这些例子中,你可以使用任何types而不是UIView ) 但是,当我在Swift 3.0中做同样的事情时,我得到一个错误: Cannot invoke initializer for type 'UIView?' with no arguments Cannot invoke initializer for type 'UIView?' with no arguments 。 它还说, Overloads for 'UIView?' exist with these partially matching parameter lists: (Wrapped), (nilLiteral: ()) Overloads for 'UIView?' exist with these partially matching parameter lists: […]
我是苹果开发新手,很快我会通过AppStore分发我的应用程序。 所以现在我正在使用Swift 3,默认情况下,部署目标设置为iOS 10.0。这意味着我将无法在iOS 8-9上运行它。 在Swift 3中,我使用了以后的操作系统中没有的新的funcs
在Xcode 8 beta 4中, NSError被桥接到Swift Error协议types。 这在处理失败的SKPaymentTransaction时会影响StoreKit。 您应该检查以确保没有发生错误,因为事务被取消以知道是否向用户显示错误消息。 你通过检查错误的code来做到这一点。 但与Error而不是NSError ,没有定义的code 。 我一直无法弄清楚如何从Error正确得到错误代码。 这在Swift 3的早期版本中起作用: func failedTransaction(_ transaction: SKPaymentTransaction) { if let transactionError = transaction.error { if transactionError.code != SKErrorCode.paymentCancelled.rawValue { //show error to user } } … } 现在, error是一个Error不是NSError , code不是一个成员。