我是Swift的新手(本周开始),我正在从Objective-C迁移我的应用程序.我在Objective-C中基本上有以下代码可以正常工作:
typedef enum : int {
MyTimeFilter1Hour = 1,
MyTimeFilter1Day = 2,
MyTimeFilter7Day = 3,
MyTimeFilter1Month = 4,
} MyTimeFilter;
...
- (void)selectFilter:(id)sender
{
self.timeFilterSelected = (MyTimeFilter)((UIButton *)sender).tag;
[self closeAnimated:YES];
}
Run Code Online (Sandbox Code Playgroud)
将它翻译成Swift时,我做了以下事情:
enum MyTimeFilter : Int {
case OneHour = 1
case OneDay = 2
case SevenDays = 3
case OneMonth = 4
}
...
@IBAction func selectFilter(sender: AnyObject) {
self.timeFilterSelected = (sender as UIButton).tag as MyTimeFilter
self.close(true)
}
Run Code Online (Sandbox Code Playgroud)
通过这样做,我得到错误:
'Int'不能转换为'MyTimeFilter'
我不知道如果我的做法(使用标签属性)是最好的,但无论如何,我需要做这样在我的应用程序不同的地方铸造的.有没有人知道如何摆脱这个错误?
谢谢!
我正在将一个应用程序从Objective-C切换到Swift,我有几个带有存储属性的类别,例如:
@interface UIView (MyCategory)
- (void)alignToView:(UIView *)view
alignment:(UIViewRelativeAlignment)alignment;
- (UIView *)clone;
@property (strong) PFObject *xo;
@property (nonatomic) BOOL isAnimating;
@end
Run Code Online (Sandbox Code Playgroud)
由于Swift扩展不接受这些存储的属性,我不知道如何维护与Objc代码相同的结构.存储的属性对我的应用程序非常重要,我相信Apple必须在Swift中创建一些解决方案.
正如jou所说,我所寻找的实际上是使用关联对象,所以我做了(在另一个上下文中):
import Foundation
import QuartzCore
import ObjectiveC
extension CALayer {
var shapeLayer: CAShapeLayer? {
get {
return objc_getAssociatedObject(self, "shapeLayer") as? CAShapeLayer
}
set(newValue) {
objc_setAssociatedObject(self, "shapeLayer", newValue, UInt(OBJC_ASSOCIATION_RETAIN))
}
}
var initialPath: CGPathRef! {
get {
return objc_getAssociatedObject(self, "initialPath") as CGPathRef
}
set {
objc_setAssociatedObject(self, "initialPath", newValue, UInt(OBJC_ASSOCIATION_RETAIN))
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是在执行以下操作时我得到了EXC_BAD_ACCESS:
class UIBubble : UIView {
required init(coder …Run Code Online (Sandbox Code Playgroud) 我有一个带有五个图标的UITabBar,其中大多数只有一种颜色是扁平的.但是,其中一个按钮不应该有色调,因为它是公司的徽标,徽标有各种不同的颜色.我知道有可能使用UINavigationBar和UIToolbar(这是我正在使用的,这是一个可怕的解决方法).
我做了一些沉重的搜索并尝试了许多不同的解决方案(我想出了一些疯狂的解决方案),但是它们似乎都不适用于iOS 7.有没有人知道如何实现这一目标?
太感谢了!
我遇到了问题,我在网上找不到其他人同样的斗争,也许这太傻了.
我有以下课程:
class UIXOColourPicker : UIView {
@IBInspectable var moodValue: Int!
...
}
Run Code Online (Sandbox Code Playgroud)
在我的故事板中,我有一个像这样的观点:

用户定义的运行时属性是由Xcode IBInspectable功能生成的(这真的很酷btw),但每当我尝试运行应用程序时,我都会收到错误
*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIXOColourPicker 0x7fa86877c420> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key moodValue.'
我在Xcode 6 - Beta 6上.
有任何想法吗?
对不起,如果这是一个愚蠢的问题,但我已经在努力了2个小时,我没有任何其他Swift开发人员来看看它.
干杯
我有一个UITableView,它的单元格可能会根据每个上面显示的数据而有所不同,所以我有两个可重复使用的单元格,UIPendingXOCell即UIXOCell.在某些时候,每UIPendingXOCell一个都成为一个UIXOCell.
有关上下文,请参阅下面的代码:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var xoItem = self.xoForIndexPath(indexPath)
var xoItemPFObject = xoItem.pfObject
// If it's a pending XO
if xoItemPFObject.objectId == nil {
var cellIdentifier = "cell-pending-xo-list"
var cell: UIPendingXOCell! = tableView.dequeueReusableCellWithIdentifier(cellIdentifier) as UIPendingXOCell!
...
return cell
}
else {
var cellIdentifier = "cell-xo-list"
var cell: UIXOCell! = tableView.dequeueReusableCellWithIdentifier(cellIdentifier) as UIXOCell!
...
return cell
}
}
Run Code Online (Sandbox Code Playgroud)
示例:我有一个包含5个对象的列表,在调用时.reloadData()生成1 UIPendingXOCell和4 UIXOCell(全部正常).我还有一个在后台运行的动作,它以一种方式改变对象,当我.reloadData() …
在我的一个 Objective-C 类中,我有一个 type 属性,我UIViewController<UIProfileListHeaderDelegate>将如何在 Swift 中表示它?我需要从UIViewController和访问属性和方法UIProfileListHeaderDelegate。
谢谢!