我喜欢Swift的许多功能,但是使用操纵字符串仍然是一大难题。
func checkPalindrome(word: String) -> Bool {
print(word)
if word == "" {
return true
} else {
if word.characters.first == word.characters.last {
return checkPalindrome(word.substringWithRange(word.startIndex.successor() ..< word.endIndex.predecessor()))
} else {
return false
}
}
}
Run Code Online (Sandbox Code Playgroud)
每当字符串的长度为奇数时,此代码都会失败。我当然可以这样做,所以该块的第一行是if word.characters.count < 2,但是Swift中有没有一种方法可以轻松获取子字符串并进行检查?
更新 我喜欢很多建议,但是我想原来的问题可能会误导人,因为这是关于String的问题,而不是为函数获取正确的结果。
例如,在Python中,checkPalindrome(word [1:-1])适用于递归定义,而Swift代码则不太优雅,因为它需要其他技巧。
在使用iOS 10和Swift 3时,Xcode 8中似乎存在(错误的)内存泄漏错误.
以下代码报告了Instruments和Xcode 8内存调试器中的内存泄漏:
class SomeClass: NSObject {
var view: SomeView!
deinit {
print("SomeClass deinit")
}
}
class SomeView: UIView {
weak var reference: SomeClass?
deinit {
print("SomeView deinit")
}
}
class ViewController: UIViewController {
var someProperty: SomeClass?
override func viewDidLoad() {
super.viewDidLoad()
let c = SomeClass()
let v = SomeView()
c.view = v
v.reference = c
someProperty = c
}
}
Run Code Online (Sandbox Code Playgroud) 我似乎找不到真正解释类型类定义| m -> s中含义的书籍MonadState:
class Monad m => MonadState s m | m -> s where
{- other stuff here -}
Run Code Online (Sandbox Code Playgroud)
我目前正在读的书解释了
类型
s变量表示状态的类型。m它由该部分指定的monad 唯一确定| m -> s。
但我不明白这到底是什么意思。
我的理解是,它m必须是带有Monad实例的某种类型,并且m具有它包含的值。这是否意味着所提供的单子s会出现m s在类型表达式中——即类似的东西return :: Monad m => s -> m s?
直到iOS 7.0,文本字段色调颜色更改为您在故事板中设置的颜色.从iOS 7.1开始,除非以编程方式执行,否则不会更改.
这是一个错误吗?有人知道吗?
我正在学习Python,并希望确认Objective-C和Swift中的某种行为.
测试如下:
蟒蛇
def replace(list):
list[0] = 3
print(list)
aList = [1, 2, 3]
print(aList)
replace(aList)
print(aList)
Run Code Online (Sandbox Code Playgroud)
Objective-C的
- (void)replace:(NSMutableArray *)array {
array[0] = @1;
NSLog(@"array: %@, address: %p\n%lx", array, array, (long)&array);
}
NSMutableArray *array = [@[@1, @2, @3] mutableCopy];
NSLog(@"original: %@, address: %p \n%lx", array, array, (long)&array);
[self replace:array];
NSLog(@"modified: %@, address: %p \n%lx", array, array, (long)&array);
Run Code Online (Sandbox Code Playgroud)
迅速
var numbers = [1, 2, 3]
let replace = { (var array:[Int]) -> Void in
array[0] = 2
print("array: \(array) address:\(unsafeAddressOf(array …Run Code Online (Sandbox Code Playgroud) 我使用Firebase函数检测到存储的上载事件,并将下载URL写入数据库,如下所示:
exports.processFile = functions.storage.object().onChange((event) => {
const object = event.data,
filePath = object.name;
if (object.resourceState === 'exists') {
// Do something
}
}
Run Code Online (Sandbox Code Playgroud)
收到有关SDK 1.0的电子邮件时,我像这样更新了功能:
exports.processFile = functions.storage.object().onFinalize((object, context) => {
const filePath = object.name;
if (object.resourceState === 'exists') {
// Do something
}
}
Run Code Online (Sandbox Code Playgroud)
更新后,功能中断,因此我决定resourceState在日志中打印并得到一个undefined。到底是怎么回事?
问题1
我的第一个问题是将an AVAudioPlayerNode和an AVAudioSequencer用于MIDI 时的播放同步。基本上,我试图通过MIDI播放某些东西,但是它们需要完全同步。
我知道AVAudioPlayerNodes 有同步方法,但是音序器似乎没有这样的东西。
目前,我已经尝试在单独的线程上使用CAMediaTime() + delay和usleep,但是它们似乎不能很好地工作。
问题2我正在使用上的水龙头engine.inputNode来获取录音,与音乐播放分开。但是,录音似乎开始得较早。当我将记录的数据与原始播放进行比较时,相差大约300毫秒。我可以在300毫秒后开始记录,但是即使那样,也不能保证精确的同步,并且可能与机器有关。
所以我的问题是,什么是确保在播放开始时准确开始录制的好方法?
事实证明,在Dictionary扩展中,下标因为说是非常没用Ambiguous reference to member 'subscript'。看来我要么必须做Swift要做的事情,要么要subscript(Key)调用一个函数。有任何想法吗?
例如,
public extension Dictionary {
public func bool(_ key: String) -> Bool? {
return self[key] as? Bool
}
}
Run Code Online (Sandbox Code Playgroud)
由于下标被认为是模棱两可的,因此将无法使用。
添加我的误解来自以下事实:我认为这Key是AssociatedType一个通用参数,而不是通用参数。
swift ×4
ios ×3
avfoundation ×1
dictionary ×1
firebase ×1
hashtable ×1
haskell ×1
ios10 ×1
memory-leaks ×1
palindrome ×1
pointers ×1
recursion ×1
subscript ×1
swift3 ×1
tintcolor ×1
uitextfield ×1
xcode ×1
xcode8 ×1