swift實現(xiàn)持續(xù)震動

首先我必須說清楚的是,本文的重點不是講如何通過Swift實現(xiàn)持續(xù)震動這個功能佛嬉,而是通過實現(xiàn)這個功能來學習在Swift中如何把一個c函數(shù)作為另一個函數(shù)的參數(shù)祸轮。之所以選這個功能,也是百度了一下芳室,發(fā)現(xiàn)并沒有用swift實行的博客(要么語法過時,要么編譯不過)刹勃。如果僅僅只是關注功能的實現(xiàn)堪侯,可以直接拉到底部。

如果你有OC使用經(jīng)驗荔仁,一定知道先要注冊一個震動的回調:

let temp :UnsafeMutablePointer =nil

AudioServicesAddSystemSoundCompletion(kSystemSoundID_Vibrate,nil,nil,soundCompleteCallback(kSystemSoundID_Vibrate, temp),nil)

然后實現(xiàn)soundCompleteCallback這個回調函數(shù):

?

上面這段代碼的意思就是2秒震動一次伍宦,結下來當你使用

AudioServicesPlaySystemSound(kSystemSoundID_Vibrate)

我們預計的結果是回調到soundCompleteCallback函數(shù),然后2秒后再次震動乏梁,然后又回調次洼,2秒后再震動....這樣就實現(xiàn)了持續(xù)震動。

然而遇骑,事實是Xcode會報一個異常:

Cannot convert value of type '()' to expected argument type 'AudioServicesSystemSoundCompletionProc' (aka '@convention(c) (UInt32, UnsafeMutablePointer<()>) -> ()')

大意就是參數(shù)不對卖毁,我們再看看swift源碼

AudioServicesAddSystemSoundCompletion
AudioServicesSystemSoundCompletionProc

AudioServicesAddSystemSoundCompletion這個函數(shù)的第個4個參數(shù)是一個繼承AudioServicesSystemSoundCompletionProc的c函數(shù),看到這里我也是不得要領,歡迎大神在評論區(qū)指點落萎。不過當我用oc那樣只傳函數(shù)名的時候亥啦,Xcode給了我一點提示:

A C function pointer can only be formed from a reference to a'func' or a literal closure

回調函數(shù)只能是一個指針指向一個C函數(shù)

在Swift中你只能通過一個全局函數(shù)或閉包(不能值捕獲,如果你對swift中的閉包或者值捕獲不了解练链,請參考:swift閉包(中文翻譯)),不能使一個實例方法翔脱。于是我換成下面這種寫法:

3行代碼實現(xiàn)了持續(xù)震動

用閉包完美解決了這個“2秒一次,持續(xù)震動”的問題媒鼓。但是届吁,對于全局函數(shù)這種方式我也嘗試了多次,發(fā)現(xiàn)始終解決不了绿鸣。

水平有限疚沐,說錯了的地方希望大神補充。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末枚驻,一起剝皮案震驚了整個濱河市濒旦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌再登,老刑警劉巖尔邓,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件晾剖,死亡現(xiàn)場離奇詭異,居然都是意外死亡梯嗽,警方通過查閱死者的電腦和手機齿尽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來灯节,“玉大人循头,你說我怎么就攤上這事⊙捉” “怎么了卡骂?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長形入。 經(jīng)常有香客問我全跨,道長,這世上最難降的妖魔是什么亿遂? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任浓若,我火速辦了婚禮,結果婚禮上蛇数,老公的妹妹穿的比我還像新娘挪钓。我一直安慰自己,他們只是感情好耳舅,可當我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布碌上。 她就那樣靜靜地躺著,像睡著了一般挽放。 火紅的嫁衣襯著肌膚如雪绍赛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天辑畦,我揣著相機與錄音吗蚌,去河邊找鬼。 笑死纯出,一個胖子當著我的面吹牛蚯妇,可吹牛的內容都是我干的。 我是一名探鬼主播暂筝,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼箩言,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了焕襟?” 一聲冷哼從身側響起陨收,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后务漩,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拄衰,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年饵骨,在試婚紗的時候發(fā)現(xiàn)自己被綠了翘悉。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡居触,死狀恐怖妖混,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情轮洋,我是刑警寧澤制市,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站砖瞧,受9級特大地震影響息堂,放射性物質發(fā)生泄漏。R本人自食惡果不足惜块促,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望床未。 院中可真熱鬧竭翠,春花似錦、人聲如沸薇搁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽啃洋。三九已至传货,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間宏娄,已是汗流浹背问裕。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留孵坚,地道東北人粮宛。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像卖宠,于是被迫代替她去往敵國和親巍杈。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內容